我在Office VSTO插件中有一些代码(在VB.NET中为Word,Excel 2003和2007实现),这会导致某些外部自动化代码出现问题。
有没有办法可以确定Office文档是否已由自动化代码打开,而不是由用户打开?应用程序或文档对象中的一些差异,或者我可以处理的事件只会在一种或另一种情况下触发?
答案 0 :(得分:0)
嗯,一般来说,自动化会打开文档NON VISIBLE,因此您应该能够在documentOpen事件期间测试文档的可见性。它可能不完美,但据我所知,用户无法手动打开文档,因此它应该可以正常工作。
OTOH,有些自动化会故意打开文档(因此用户可以编辑它们),因此可能不是100%的解决方案。
答案 1 :(得分:0)
好的,所以当通过Office对象模型打开Office应用程序时,命令行会使用/automation
开关(例如Winword.exe /automation
)。
所以我只是在我的插件启动时检查这个并设置一个全局布尔值:
If (Environment.CommandLine.IndexOf("/automation", StringComparison.OrdinalIgnoreCase) >= 0) Then mbOpenedByAutomation = True
我必须做一些测试,以确保没有任何其他可能使用该开关的情况,但我认为这样做会有所帮助。