【问题标题】:Excel automation via OLE - suppressing / catching dialog box errors?通过 OLE 实现 Excel 自动化 - 抑制/捕获对话框错误?
【发布时间】:2008-10-07 20:44:35
【问题描述】:

我通过 C# 程序和 OLE 刷新 Excel 2007 数据连接。大部分工作由单个 Workbooks.RefreshAll() 语句完成。

就像刷新电子表格的本质一样,各种事情都可能出错。在刷新过程中,程序可以给出关于“无法从文件'|'中读取数据”的对话框错误消息,以及关于“重叠的透视表报告”的消息。这两个都是致命的,我应该能够捕捉到这些错误,并在出错时退出我的程序。

不幸的是,我似乎无法捕捉到这些问题,相反,我的自动化程序一直处于等待状态,直到我出现并在对话框中按 Enter 键。

有谁知道是否有可能以编程方式捕获 excel 对话框中显示的错误,而不是将它们显示给用户?

【问题讨论】:

    标签: c# excel ole


    【解决方案1】:

    最好的办法是将 Application.DisplayAlerts 属性设置为 False。也就是说,假设您的 Excel.Application 对象变量名为“xlApp”,您只需执行以下操作:

    xlApp.DisplayAlerts = false;
    

    请注意,这将导致对每个对话框进行默认响应,这通常是您想要的。 (没有很好的解决方法。离开 DisplayAlerts = True 并使用 SendKeys 可能是您唯一的其他选择,但会很丑而且很容易出错。)

    由于您是通过 OLE 自动化进行此调用,因此此调用是跨进程的,因此,DisplayAlerts 设置将持续存在,直到您更改它为止。 (如果通过 VBA 在进程内调用,它会在例程完成时自动切换回 true。相同的行为可能适用于通过 CommandBar 或 Ribbon 控件调用的 VB.NET 或 C# 插件,但需要测试确定。)

    【讨论】:

    • 这适用于 Excel 标准对话框,但不适用于 VBA 结束/调试错误框
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 2011-05-10
    • 2012-10-21
    • 1970-01-01
    • 2018-11-06
    相关资源
    最近更新 更多