我正在使用c ++为office文件生成缩略图。我使用类似于此的自动化打开并保存文件:https://support.microsoft.com/en-us/kb/179494。由于文件很多,这需要花费很多时间,程序应该在整个晚上运行。
除非文件包含自动启动宏,否则一切正常。
Sub AutoOpen()
Application.Run ("stupidMacroWhichDoesntExist")
End Sub
在这种情况下,循环停止,并显示一条错误消息,表明无法执行宏。
关闭课程,我已将信任中心的宏设置设置为 - >禁用所有宏而不通知
仍会显示错误消息
在Excel中,我可以通过以下方式阻止:
objExcelApp.SetEnableEvents(false);
不幸的是,c ++中的单词application没有SetEnableEvents方法。我搜索了很多,发现了很多VB代码来防止这种情况。大多数情况下它是这样的:
objWord.WordBasic.DisableAutoMacros 1
但我在c ++中找不到任何东西
我非常感谢你的帮助。
答案 0 :(得分:0)
我相信你在寻找:
WordApplication.AutomationSecurity = msoAutomationSecurityForceDisable
信任中心设置不适用于使用自动化打开的文档。此属性及其MsoAutomationSecurity枚举对应于对象模型中的该设置。
FWIW使用C ++也可以实现WordBasic方法。我不知道C ++语法,但是使用C#我需要使用PInvoke(GetType()。InvokeMember)直接与IDispatch进行通信(我认为这是正确的术语)。
答案 1 :(得分:0)
我已经解决了。我正在备份实际的宏(word文件夹中的vbaData.xml和vbaProject.bin),将一个虚拟宏放入word文件中,通过自动化打开它并保存它以生成缩略图。之后,我将备份的宏放回到word文件中。 由于虚拟宏不执行任何操作,因此无论在原始宏中编程什么都不会执行任何操作,我都是安全的。