C# 通过OLE实现Excel自动化-抑制/捕获对话框错误?
我通过C#程序和OLE刷新Excel 2007数据连接。大部分工作都是由一个Workbooks.RefreshAll()语句完成的 正如刷新电子表格的本质一样,各种事情都可能出错。在刷新过程中,程序可以给出关于“无法从文件“|”读取数据”的对话框错误消息,以及关于“重叠数据透视表”的消息。这两个都是致命的,我应该能够捕捉到这些错误,并带着错误退出我的程序 不幸的是,我似乎无法捕捉到这些问题,取而代之的是,我的自动程序一直在等待,直到我出现并点击对话框上的enter键C# 通过OLE实现Excel自动化-抑制/捕获对话框错误?,c#,excel,ole,C#,Excel,Ole,我通过C#程序和OLE刷新Excel 2007数据连接。大部分工作都是由一个Workbooks.RefreshAll()语句完成的 正如刷新电子表格的本质一样,各种事情都可能出错。在刷新过程中,程序可以给出关于“无法从文件“|”读取数据”的对话框错误消息,以及关于“重叠数据透视表”的消息。这两个都是致命的,我应该能够捕捉到这些错误,并带着错误退出我的程序 不幸的是,我似乎无法捕捉到这些问题,取而代之的是,我的自动程序一直在等待,直到我出现并点击对话框上的enter键 是否有人知道是否可以通过编程
是否有人知道是否可以通过编程捕获excel对话框中显示的错误,而不是将其显示给用户?最好将Application.DisplayAlerts属性设置为False。也就是说,假设您的Excel.Application对象变量名为“xlApp”,则只需执行以下操作:
xlApp.DisplayAlerts = false;
请注意,这将导致对每个对话框进行默认响应,这通常是您想要的。(没有好办法解决这个问题。保留DisplayAlerts=True并使用SendKeys可能是您唯一的其他选择,但这样做很难看,而且很容易出错。)
由于您是通过OLE Automation进行此调用,因此此调用是跨进程的,因此,DisplayAlerts设置将一直保持,直到您更改它为止。(如果通过VBA在进程中调用,则在例程完成时会自动切换回true。同样的行为可能适用于通过命令栏或功能区控件调用的VB.NET或C#加载项,但需要进行测试才能确定。)这对于Excel标准对话框很有效,但不适用于VBA结束/调试错误框