【问题标题】:Word Automation - Disable Alerts文字自动化 - 禁用警报
【发布时间】:2010-11-22 12:30:09
【问题描述】:

我正在自动化 Word,所以我想取消所有警报。

Word.Application word = new Word.Application();
word.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone;

我使用上面列出的代码,但我不断收到来自 Word 的消息 - 例如,文档已经打开。有没有办法避免这种情况?如何抑制所有那些愚蠢的消息框?

编辑
考虑到所有答案,我想看门狗确实是唯一的选择。糟糕的是,过去几年没有任何变化。

可以在没有真正答案的情况下关闭线程。

【问题讨论】:

  • 我的第一个问题是为什么你的代码试图打开一个已经打开的文档?
  • 能否贴出完整的代码,以便可以复制消息?
  • Word.Document wordDoc = word.Documents.Open(document);可以产生这种行为。问题不在于如何避免此类错误,因为并非在每种情况下都可以做到(例如用户交互)。
  • 我不知道这意味着什么。您的用户在您的宏运行时打开文档?无论哪种方式,除非您在 MS Word 中遇到一些非常史诗般的竞争条件,否则尝试打开文档的任何方法开头的保护子句都可以正常工作。
  • 没错。用户可以在自动化运行时启动 Word,这可能导致自动化失败。由于这些消息框阻止了流程执行,我会永远等待执行下一个操作。我可以实现超时保护,但这不是最优雅的方式 - 从我的角度来看。此外,还有与用户无关的问题,例如填充格式字段也可能导致消息框......

标签: c# .net ms-word office-interop


【解决方案1】:

您发布的代码部分显然看起来正确,但我无法重现您描述的行为。不过……

我非常怀疑答案是你不能完全抑制 Word 中的消息。 它被设计为一个用户交互应用程序,DisplayAlerts 设置有点像命中或未命中的提议。某些错误看起来可能会从指定的警报设置中排除,并且无论如何都会显示出来。例如,我以前见过拼写和语法错误是这样的。

最好的办法是尝试预测可能发生的错误并避免生成它们。在您的情况下,您应该检查您要打开的文档是否已经存在打开。我不确定您为什么会首先生成此错误(您是否发现错误并然后搜索文档的现有实例以对其进行操作,或者您的代码继续运行?),但在开始执行相关代码之前插入一些保护子句应该相当简单。

【讨论】:

  • 我非常怀疑答案是您不能完全隐藏 Word 中的消息。 -> 这个说法是正确的。您永远无法隐藏 Word 中的所有消息。
  • 科迪·格雷是对的。您会发现,当您最不期待的时候,仍然会弹出大量消息。您将需要大量的日志记录,甚至可能需要一个看门狗类,如果它没有在合理的时间内返回,它基本上会硬杀死您启动的 Word 实例。否则,如果您在无人看管的情况下运行,您很可能最终会挂断消息,从而挂起您的应用程序。这不是最佳选择,但很多人都以这种方式工作。
  • 我仍然认为,在每个可能可能(通过广泛的测试和用户反馈确定)产生异常情况(即错误消息)的方法之前进行简单检查将阻止 99.9用最少的努力和麻烦来解决您的麻烦。喜欢(伪代码):If thisFile.IsAlreadyOpen Then Exit Sub
  • 打开的文件只是导致失败的几个条件之一。我想看门狗真的是唯一的选择。糟糕的是,过去几年没有任何变化。
  • 我不同意你的观点。办公自动化是一项功能,它过去比现在更加“技术性”。由于所有这些毫无意义的安全讨论,迫使微软实施了这些可笑的限制。
猜你喜欢
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 2013-09-03
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多