通过OLE的Excel自动化 – 抑制/捕获对话框错误?

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

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

不幸的是,我似乎无法捕捉到这些问题,相反,我的自动化程序就坐在这里,直到我进入对话框。

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

最好的办法是将Application.DisplayAlerts属性设置为False。 也就是说,假设你的Excel.Application对象variables被命名为“xlApp”,你所要做的就是如下所示:

xlApp.DisplayAlerts = false; 

请注意,这将导致每个对话框的默认响应,这通常是你想要的。 (没有什么好的解决办法,离开DisplayAlerts = True,使用SendKeys可能是你唯一的select,但会很丑,很容易出错。)

由于您通过OLE自动化进行此调用,因此此调用是跨进程的,因此DisplayAlerts设置将一直保留,直到您更改为止。 (如果通过VBA在进程中调用,则在例程完成时会自动切换回真。对于通过CommandBar或Ribbon控件调用的VB.NET或C#外接程序,也可能会有相同的行为,但可能需要testing一定。)