【问题标题】:Why Excel.Interop is returning a wrong HResult instead of FILE_NOT_FOUND? [duplicate]为什么 Excel.Interop 返回错误的 HResult 而不是 FILE_NOT_FOUND? [复制]
【发布时间】:2021-03-08 09:14:47
【问题描述】:

我一直在尝试使用以下代码加载 excel 文件 -

_workbook = await Task.Run(() =>
            {
               return _excelApp.Workbooks.Open(fileName);
            }).ConfigureAwait(false);

如果我在 fileName 参数中提供一个不存在的文件名,它会抛出一个带有以下错误代码的通用 COMException - 0x800a03ec

根据 Interop 文档,.NET 运行时应将 HResult 转换为特定异常 - https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.comexception?view=net-5.0

对于这种特殊情况,我希望得到一个FileNotFoundException,而不是通用的COMException。但是由于 HResult 不是FILE_NOT_FOUND,它抛出了通用的COMException。我的问题是为什么互操作返回错误的 HResult?我在这里做错了什么还是 Excel.Interop 中的错误?

【问题讨论】:

  • 这不是“错误”,以 0x800a 开头的错误代码用于将特定于应用程序的错误传送回您的应用程序。接下来的四个十六进制数字是该错误代码,因此您可以在 Google 上搜索“excel 错误 1004”来查找匹配项。是的,这种情况经常发生。

标签: c# excel-interop


【解决方案1】:

不,文档没有说明这一点。它说:

公共语言运行时将众所周知的 HRESULT 转换为 .NET Framework 异常...

0x800a03ec 的任意 Excel HRESULT 不是“众所周知的”,因此 .NET 不知道如何处理它,因此它仍然是 COMException

【讨论】:

  • 我明白了!我的问题是为什么 Excel.Interop 返回一个错误的(在我看来)HResult?我在这里做错了吗?
猜你喜欢
  • 2014-04-15
  • 2011-10-19
  • 2016-08-29
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多