C# 区分Excel互操作操作引发的异常

C# 区分Excel互操作操作引发的异常,c#,excel,exception,interop,comexception,C#,Excel,Exception,Interop,Comexception,我正在使用Microsoft.Office.Interop.Excel库从我的C#应用程序中将数据导出到Excel 使用无效的currentRow值调用sheet.Cells[currentRow,1])将导致System.Runtime.InteropServices.COMException,并显示以下消息: "Exception from HRESULT: 0x800A03EC" 以及错误代码-2146827284 但是,我收到了与订购Excel保存到写保护文件完全相同的错误代码 是否有

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

使用无效的
currentRow
值调用
sheet.Cells[currentRow,1])
将导致
System.Runtime.InteropServices.COMException
,并显示以下消息:

"Exception from HRESULT: 0x800A03EC"
以及
错误代码
-2146827284

但是,我收到了与订购Excel保存到写保护文件完全相同的错误代码

是否有办法区分从Excel收到的COMException,以便我可以相应地处理它们?
我不想给我的用户留下“在使用Excel时出现了一些问题,对不起,笨蛋。”

我已经使用Excel interop好几年了,我还没有找到一种方法。最好的办法是在潜在问题发生之前检查它们。我希望有更好的,但据我所知没有

编辑
您可以在VBA中捕获不同的错误,因此Excel本身确实可以区分不同的错误,但我相信.NET将所有这些错误集中到一个COMException类中,而该类不提供详细信息

我发现这篇文章详细介绍了VBA错误代码:

COMException的全部要点是它从COM端返回。通常,在COM中,错误条件由特定方法的
HRESULT
返回值(不为0)发出信号


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

我使用Excel interop已经有好几年了,我还没有找到一种方法。最好的办法是在潜在问题发生之前检查它们。我希望有更好的,但据我所知没有。这是一个相当令人沮丧的情况。谢谢你想把它作为一个答案吗?责任在于Excel,而不是.NET-如果他们为不同的错误条件定义了不同的
HRESULT
值,那么不同的错误在.NET代码中是可以区分的。谢谢@Damien_,不信的人-我对此有点模糊。无法判断Excel是否隐藏了信息或.NET是否丢失了信息(可能是错误信息无法通过.NET互操作访问?)+1.了解COM