Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过OLE实现Excel自动化-抑制/捕获对话框错误?_C#_Excel_Ole - Fatal编程技术网

C# 通过OLE实现Excel自动化-抑制/捕获对话框错误?

C# 通过OLE实现Excel自动化-抑制/捕获对话框错误?,c#,excel,ole,C#,Excel,Ole,我通过C#程序和OLE刷新Excel 2007数据连接。大部分工作都是由一个Workbooks.RefreshAll()语句完成的 正如刷新电子表格的本质一样,各种事情都可能出错。在刷新过程中,程序可以给出关于“无法从文件“|”读取数据”的对话框错误消息,以及关于“重叠数据透视表”的消息。这两个都是致命的,我应该能够捕捉到这些错误,并带着错误退出我的程序 不幸的是,我似乎无法捕捉到这些问题,取而代之的是,我的自动程序一直在等待,直到我出现并点击对话框上的enter键 是否有人知道是否可以通过编程

我通过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结束/调试错误框