我使用excel 2003 COM互操作库为x86平台编译了一个C#winform应用程序。 Visual Studio项目引用了Office 2003的以下互操作文件
Microsoft.Office.Interop.Excel.dll(v 11.0.0,特定版本= true) Microsoft.Vbe.Interop.dll(v 11.0.0,特定版本= false)
此应用程序在大多数使用excel 2003,2007和2010的计算机上运行良好,但其中一位用户向我报告了以下例外情况。
此用户拥有Windows 7和Office 2010
System.InvalidCastException: Unable to cast COM object of type 'Microsoft.Office.Interop.Excel.ApplicationClass' to interface type 'Microsoft.Office.Interop.Excel._Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{000208D5-0000-0000-C000-000000000046}' failed due to the following error: Library not registered. (Exception from HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)).
at Microsoft.Office.Interop.Excel.ApplicationClass.get_Workbooks()
从我所看到的情况来看,Office的冲突版本可能会出现此问题,但由于我特别引用了2003 Office PIA并将其与应用程序一起分发,因此我不确定导致问题的原因。 / p>
由于
答案 0 :(得分:2)
用户的注册表已损坏。他已经安装了Office,或者您将无法创建Aplication对象,但它缺少Typelib注册表项中的条目。需要允许互操作成功。
重新安装Office是一个理智而简单的解决方案。这种损失很少被孤立。