区分Excel Interop操作引发的异常

时间:2012-09-19 11:18:44

标签: c# excel exception interop comexception

我正在使用Microsoft.Office.Interop.Excel库从我的C#应用​​程序中将数据导出到Excel。

使用无效sheet.Cells[currentRow, 1])值调用currentRow会产生System.Runtime.InteropServices.COMException,并显示以下消息:

"Exception from HRESULT: 0x800A03EC"

ErrorCode -2146827284

但是,我收到了完全相同的错误代码,用于命令Excel保存到写保护文件。

我有办法区分从Excel收到的COMExceptions,所以我可以相应地处理它们吗? 我宁愿不让我的用户“在使用Excel时出错了,抱歉,傻逼。”

2 个答案:

答案 0 :(得分:1)

我已经使用Excel互操作多年了,但我还没找到办法。您最好的选择是在潜在问题发生之前进行检查。我希望有更好的东西,但据我所知,没有。

修改
您可以在VBA中捕获不同的错误,因此Excel本身可以区分各种错误,但我相信.NET会将所有这些错误归结为单个COMException类,而不会为您提供详细信息。

我发现这篇文章详细说明了VBA错误代码:
http://support.microsoft.com/kb/146864

答案 1 :(得分:1)

COMException的全部意义在于它从COM方面回来了。通常,在COM中,错误条件由特定方法不为0的HRESULT返回值发出信号。

不幸的是,这是COM“合同”中内置的错误信息的范围。因此,您将获得错误值(0x800A03EC与-2146827284的值相同)。事情的.NET方面没有进一步的信息。