【问题标题】:How to disable popups when opening a file using Microsoft.Office.Interop使用 Microsoft.Office.Interop 打开文件时如何禁用弹出窗口
【发布时间】:2011-04-07 02:00:40
【问题描述】:

如只读确认,其他警报。 如何处理这些弹出窗口?还是忽略它们?

【问题讨论】:

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


    【解决方案1】:

    看我的回答here.

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

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

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

    【讨论】:

    • 我已经设置了这个,但是还有一个只读确认框等的弹出窗口。
    • 只读确认框是您主要关心的问题吗?如果是这样,您是否尝试在 open() 方法中将 ReadOnly 设置为 false 和/或 IgnoreReadOnlyRecommended 设置为 true 来打开文档?请参阅此处了解我所指的内容:Workbooks.Open
    • 自 Interop 2013 起您不能使用 true 或 false,而是使用 Word.WdAlertLevel.wdAlersNone / ...
    • @dotNetkow 在代码停止工作之后,我已将只读属性设置为 true :(
    • 你太棒了!我看了几十个无用的答案,浪费了很多宝贵的时间,才最终找到你的答案……
    【解决方案2】:

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

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

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

    由于在打开文件之前创建了文件副本,因此我不必将 AutomationSecurity 更改回默认设置。

    【讨论】:

      【解决方案3】:

      添加说明:对于某些受密码保护的文件格式(我测试过 .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】:

        亲爱的“Uriel Fernandez”和他的想法 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;
        // work ...
        }
        catch {}
        app.Quit();
        if (app != null) Marshal.ReleaseComObject(app);
        

        【讨论】:

        • 这是一个很好的补充,感谢分享!
        【解决方案5】:

        试试这个:

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

        这将禁用弹出窗口。

        【讨论】:

        • 这个答案在已经发布的其他答案之上添加了什么?
        • 这不起作用...执行宏时出现弹出错误
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-20
        • 2011-08-05
        • 1970-01-01
        • 2016-11-08
        • 2023-03-09
        相关资源
        最近更新 更多