c# - C#中的Excel互操作中的HRESULT代码

标签 c# excel error-handling interop hresult

我正在寻找一种将Excel与互操作一起使用时在C#中输出错误的干净方法。

如果文件不是“正确的”,则显示类似“blabla HRESULT:0x800AC472”的消息。

我希望收到类似“使用的文件存在此问题或该问题”的消息。为了做到这一点,我需要知道每个HRESULT映射到哪个错误?

如何获得这样的错误列表?

我查看了MSDN,找到了一些描述,但似乎找不到上面提到的所有代码(如“0x800AC472”)的列表。

最佳答案

我将Excel HRESULT代码0x800AC472设置为VBA_E_IGNORE,这表明Excel已“暂停了对象浏览器”。

在某些情况下,Excel将拒绝所有传入的COM请求。发生这种情况的两种情况是用户

  • 正在忙于编辑公式,或者
  • 按下Excel工作表上的鼠标按钮。

  • 可能还有其他情况-例如,我不确定Excel忙于计算时错误代码是什么。

    如果您正在执行COM自动化以与正在交互使用的Excel实例进行对话,则您对Excel进行的任何COM调用都可能返回此错误。我对Excel-DNA采取的一种方法(互操作总是通过Excel进程中的外接程序发生)是尝试调用Application.Run(...)在外接程序中运行宏。一旦Application.Run调用成功,宏将在Excel不会由于COM挂起COM调用而导致COM请求失败的上下文中的主Excel线程上运行。

    您可能会从Excel中看到一些其他COM错误:
        const uint RPC_E_SERVERCALL_RETRYLATER = 0x8001010A;
        const uint RPC_E_CALL_REJECTED = 0x80010001; // Not sure when we get this one?
                                                     // Maybe when trying to get the Application object from another thread, 
                                                     // triggered by a ribbon handler, while Excel is editing a cell.
        const uint VBA_E_IGNORE = 0x800AC472;        // Excel has suspended the object browser
        const uint NAME_NOT_FOUND = 0x800A03EC;      // When called from the main thread, but Excel is busy anyway.
    

    关于c# - C#中的Excel互操作中的HRESULT代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24069458/

    相关文章:

    c# - 在哪里写连接字符串?在 app.config 或 web.config 中?

    java - 捕获 Spring Integration DSL 上的错误

    magento - 无效的配置字段后端模型: adminhtml/system_config_backend_web_secure_offloaderheader

    返回给定版本字符串的父版本的 Excel 公式

    excel - 将照片与 Excel 中的单元格链接

    SUMIFS 的 VBA 代码?

    python - ValueError : could not broadcast input array from shape (3,25000) into shape (25000)

    c# - While 循环,对第五个、第十个、第十五个……等数求和

    c# - 如果两个交错数组相等,如何进行单元测试?

    C# 5 扩展方法用作 C# 6 null 条件运算符