正如标题所示,我有一个.Net应用程序,它使用interop在Word中打开文档。我已经设置了
app.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable
。根据文档,这个“禁用以编程方式打开的所有文件中的所有宏,而不显示任何安全警报”
但是,当我尝试打开一个特定文档时,屏幕上会出现一个对话框,显示“无法加载对象,因为它在此计算机上不可用”。这是一个客户文档,但我相信它包含一个宏,它引用了我尚未安装的COM对象。
我做了些蠢事吗?有没有办法在打开Word文档时实际禁用宏?
答案 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();