Office VSTO转换带宏Word文档为PDF时无响应问题求助
解决Office Interop(VSTO)转换含宏Word文档到PDF时的挂起问题
问题根源
通过Outlook调用Word Interop转换含宏文档时,宏信任提示对话框会被隐藏在后台进程中,无法被用户看到和操作,导致Word进程挂起无响应。即使设置了DisplayAlerts和AutomationSecurity,也会因为Outlook与Word的窗口层级关系,导致弹窗无法正常显示。
可行解决方案
方案1:禁用宏(无需用户交互,推荐)
如果转换PDF不需要执行文档中的宏,可以直接设置AutomationSecurity为强制禁用宏,彻底避免信任提示弹窗:
private void WordConvertToPDF(string pathToFileToConvert, string exportPath) { Word.Application wordApp = null; Word.Documents documents = null; Word.Document document = null; try { wordApp = new Word.Application(); // 强制禁用宏,跳过信任提示 wordApp.AutomationSecurity = Office.MsoAutomationSecurity.msoAutomationSecurityForceDisable; wordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone; // 关闭所有提示 documents = wordApp.Documents; document = documents.Open(pathToFileToConvert); document.ExportAsFixedFormat( exportPath, Word.WdExportFormat.wdExportFormatPDF, Item: Word.WdExportItem.wdExportDocumentWithMarkup ); } finally { if (wordApp != null) { wordApp.Quit(Word.WdSaveOptions.wdDoNotSaveChanges); } document?.ReleaseCOM(); documents?.ReleaseCOM(); wordApp?.ReleaseCOM(); } }
方案2:强制显示Word窗口与信任对话框
如果需要保留宏执行(用户需手动信任),可以让Word窗口强制显示在前台,确保信任提示能被用户看到:
// 需要导入Windows API [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); private void WordConvertToPDF(string pathToFileToConvert, string exportPath) { Word.Application wordApp = null; Word.Documents documents = null; Word.Document document = null; try { wordApp = new Word.Application(); wordApp.Visible = true; // 显示Word窗口 wordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsAll; wordApp.AutomationSecurity = Office.MsoAutomationSecurity.msoAutomationSecurityByUI; // 强制将Word窗口置顶 SetForegroundWindow(new IntPtr(wordApp.Hwnd)); documents = wordApp.Documents; document = documents.Open(pathToFileToConvert); document.ExportAsFixedFormat( exportPath, Word.WdExportFormat.wdExportFormatPDF, Item: Word.WdExportItem.wdExportDocumentWithMarkup ); } finally { if (wordApp != null) { wordApp.Quit(Word.WdSaveOptions.wdDoNotSaveChanges); } document?.ReleaseCOM(); documents?.ReleaseCOM(); wordApp?.ReleaseCOM(); } }
方案3:添加文档目录到Office受信任位置
通过Office信任中心,将待转换文档所在的目录添加为受信任位置,这样Word打开该目录下的含宏文档时,会自动信任,不会弹出提示。这种方式适合批量处理固定目录下的文档,无需修改代码。
内容的提问来源于stack exchange,提问作者Andre_IRIS
相关产品推荐
相关产品推荐

