我在使用带互操作的Excel时,正在寻找一种在C#中输出错误的简洁方法。
当文件不是"对" a有一条消息,比如" blabla HRESULT:0x800AC472 "。
我宁愿想要一条消息,例如" 使用的文件有这个或那个问题"。为了做到这一点,我需要知道每个HRESULT映射到哪个错误?
如何获得这样的错误列表?
我查看了MSDN,找到了一些说明,但我似乎无法找到所有代码的列表,例如" 0x800AC472 "提到上面。
答案 0 :(得分:3)
我将Excel HRESULT代码0x800AC472设为VBA_E_IGNORE
,表示Excel已暂停对象浏览器'。
在某些情况下,Excel将拒绝所有传入的COM请求。发生这种情况的两种情况是用户
可能还有其他情况 - 例如,我不确定Excel忙于计算时的错误代码是什么。
如果您正在使用COM自动化与交互式使用的Excel实例进行通信,那么您对Excel所做的任何COM调用都可能会返回此错误。我使用Excel-DNA(其中互操作总是从Excel进程中的加载项发生)的一种方法是尝试调用Application.Run(...)来在加载项中运行宏。一旦Application.Run调用成功,宏将在主要Excel线程上运行,在该上下文中,由于Excel暂停COM调用,COM请求不会失败。
您可以从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.