【问题标题】:Can I determine if an Office document has been opened by external automation code?我是否可以确定 Office 文档是否已被外部自动化代码打开?
【发布时间】:2014-04-09 00:43:36
【问题描述】:

我在 Office VSTO 插件中有一些代码(在 VB.NET 中为 Word、Excel 2003 和 2007 实现)导致一些外部自动化代码出现问题。

有没有一种方法可以确定 Office 文档是由自动化代码打开还是由用户打开? Application 或 Document 对象存在一些差异,或者我可以处理的事件仅在一种或另一种情况下触发?

【问题讨论】:

    标签: .net automation ms-office vsto


    【解决方案1】:

    好吧,一般来说,自动化会打开不可见的文档,因此您应该能够在 documentOpen 事件期间测试文档的可见性。它可能并不完美,但据我所知,用户无法以不可见的方式手动打开文档,因此它应该可以工作。

    OTOH,某些自动化会故意以可见的方式打开文档(以便用户可以编辑它们),因此这可能不是 100% 的解决方案。

    【讨论】:

    • 我的团队中有人提出了这个建议,但正如你所说,它不可靠,而且我遇到问题的特定自动化代码实际上让 UI 可见。
    【解决方案2】:

    好的,所以当通过 Office 对象模型打开 Office 应用程序时,命令行使用/automation 开关(例如Winword.exe /automation)。

    所以我只是在我的插件启动时检查这个并设置一个全局布尔值:

    If (Environment.CommandLine.IndexOf("/automation", StringComparison.OrdinalIgnoreCase) >= 0) Then mbOpenedByAutomation = True
    

    我必须做一些测试,以确保没有任何其他情况可能会使用该开关,但我认为这可以解决问题。

    【讨论】:

    • 如果 word 已经加载并且用户通过对象模型打开另一个文档,我会检查它是否仍然适用。通常,它不会启动另一个 word 实例,因此该技巧可能不适用于所有情况。
    • 自动化代码将创建一个新实例,这实际上是我们的问题之一。
    猜你喜欢
    • 1970-01-01
    • 2021-02-23
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多