我正在寻找一种将Excel与互操作一起使用时在C#中输出错误的干净方法。
如果文件不是“正确的”,则显示类似“blabla HRESULT:0x800AC472”的消息。
我希望收到类似“使用的文件存在此问题或该问题”的消息。为了做到这一点,我需要知道每个HRESULT映射到哪个错误?
如何获得这样的错误列表?
我查看了MSDN,找到了一些描述,但似乎找不到上面提到的所有代码(如“0x800AC472”)的列表。
最佳答案
我将Excel HRESULT代码0x800AC472设置为VBA_E_IGNORE
,这表明Excel已“暂停了对象浏览器”。
在某些情况下,Excel将拒绝所有传入的COM请求。发生这种情况的两种情况是用户
可能还有其他情况-例如,我不确定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/