如何使用OLE Interop打开Word文档时停止运行宏?

时间:2011-06-03 08:12:47

标签: ms-word office-interop com-interop

正如标题所示,我有一个.Net应用程序,它使用interop在Word中打开文档。我已经设置了

app.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable

在打开文档之前

。根据文档,这个“禁用以编程方式打开的所有文件中的所有宏,而不显示任何安全警报”

但是,当我尝试打开一个特定文档时,屏幕上会出现一个对话框,显示“无法加载对象,因为它在此计算机上不可用”。这是一个客户文档,但我相信它包含一个宏,它引用了我尚未安装的COM对象。

我做了些蠢事吗?有没有办法在打开Word文档时实际禁用宏?

2 个答案:

答案 0 :(得分:3)

尝试:

  

WordBasic.DisableAutoMacros 1

奇怪的是,这依赖于回归到VBA之前的日子,但似乎仍然是确保不会触发任何自动宏的最可靠方式(在任何文档中 - 您可能希望使用参数“0”将其返回。

我最近有一个项目,我必须处理6,000个Word模板(是的,模板,而不是文档),其中很多都有像macros等奇怪的东西。我能够使用这种技术处理除6之外的所有模板。 (我从未弄清楚那些问题是什么6)。


编辑:有关如何从C#调用此内容的讨论,请参阅:http://www.dotnet247.com/247reference/msgs/56/281785.aspx

答案 1 :(得分:0)

对于C#,您可以使用

(_wordApp.WordBasic as dynamic).DisableAutoMacros();

我正在使用的整个代码是:

using Word = Microsoft.Office.Interop.Word;
private Word.Application _wordApp;
...
                    _wordApp = new Word.Application
                {
                    Visible = false,
                    ScreenUpdating = false,
                    DisplayAlerts = Word.WdAlertLevel.wdAlertsNone,
                    FileValidation = MsoFileValidationMode.msoFileValidationSkip
                };

                _wordApp.Application.AutomationSecurity = MsoAutomationSecurity.msoAutomationSecurityForceDisable;
                (_wordApp.WordBasic as dynamic).DisableAutoMacros();