如何使用Microsoft.Office.Interop打开文件时禁用弹出窗口

时间:2011-04-07 02:00:40

标签: c# ms-office office-interop office-pia

如只读确认,其他警报。 这些弹出窗口怎么办?或者忽略它们?

5 个答案:

答案 0 :(得分:28)

请参阅我的回答here.

基本上,您可以通过“显示提醒”方法禁用所有提醒:

Microsoft.Office.Interop.[OFFICE_APP].Application app = new Microsoft.Office.Interop.[OFFICE_APP].Application();
app.DisplayAlerts = false;

其中[OFFICE_APP]是您正在使用的Office程序的名称,例如Word,Excel等。

答案 1 :(得分:2)

这是防止安全消息要求您允许宏的另一种方法。

我从MSDN阅读this article并找出以下代码:

Application wordApp = new Application()
{
    Visible = false,
    AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable
};

由于在打开文件之前会复制该文件,因此我无需将AutomationSecurity更改回默认设置。

答案 2 :(得分:0)

试试这个:

Microsoft.Office.Interop.Word.Application appWord = new 
Microsoft.Office.Interop.Word.Application();

appWord.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone;

这将禁用弹出窗口。

答案 3 :(得分:0)

添加注释:对于某些受密码保护的文件格式(我测试了.XLS,但也可能测试了其他格式),app.DisplayAlerts = false不会绕过密码对话框。

在这种情况下,您可以简单地在打开时传递一个伪造的密码,这将引发错误。如有需要,可以抓住它。

var app = new Application();
app.DisplayAlerts = false;
var workbook = app.Workbooks.Open(filePath, "fakePassword"); // Bypasses dialog, throws error

在这种情况下,抛出的错误是:

  

System.Runtime.InteropServices.COMException:您提供的密码   是不正确的。验证CAPS LOCK键已关闭,并确保   使用正确的大写字母。

答案 4 :(得分:0)

亲爱的“ 乌里尔·费尔南德斯https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel._application.automationsecurity?view=excel-pia

将我引向另一个想法https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel._application.screenupdating?view=excel-pia#Microsoft_Office_Interop_Excel__Application_ScreenUpdating

因此,可以尝试禁用它 _Application.ScreenUpdating ,然后...“您将无法看到代码在做什么,但是它将运行得更快”

编辑

Word.Application app = null;
try
{
app = new Word.Application();
app.Visible = false;
app.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
app.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable;
app.ScreenUpdating = false;
// тарам-пам-пам
}
catch {}
app.Quit();
if (app != null) Marshal.ReleaseComObject(app);