当我尝试使用以下代码访问 Excel 电子表格时,在安装了 Office 2007(第 12 版)的 Visual Studio 2012 中使用 C# 定义工作簿对象 wrkbuk 时出现“库未注册”错误
Microsoft.Office.Interop.Excel.Application excapp = new Microsoft.Office.Interop.Excel.Application();
string bookname = @"C:\Users\Public\Documents\RECRUITMENT & SELECTION\MOVEMENTS\MOVEMENTS\Miscellaneous Documents\VacanciesREAL.xls";
Workbook wrkbuk = excapp.Workbooks.Open(bookname);
Worksheet wrksht = new Worksheet();
错误详情是
System.InvalidCastException was unhandled HResult=-2147467262
Message=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)). Source=mscorlib
我在 VS 2012 附带的 Office 14 主互操作程序集中创建了对 Microsoft.Office.Interop.Excel.dll 的引用,也为 dll 的 Office 12 版本创建了引用,但都没有解决问题。我已尝试使用 regasm 注册 dll,但这也无济于事。
我可以使用 Office 14 和 Office 12 dll 在以下行中创建工作表 wrksht,因此问题似乎只影响工作簿定义。
2013 年 12 月 17 日
尝试重新安装 Office 2007 无济于事,但找到了这个有效的解决方案。这是在
问题是来自多个版本的 Office 的代码 - 我有来自 Office 14 的代码,可能来自 VS 2012 安装
我怀疑 VS 2012 RC 安装了 Office 2013 类型库,并且现在注册了重复版本。我收到了特定的错误消息
('unable to cast _Application'....'TYPE_E_LIBNOTREGISTERED')
在一次困惑的卸载之后,然后重新安装旧版本的 Office。我按照这里另一个论坛帖子的建议解决了这个问题,遗憾的是我找不到……基本上我在注册表中搜索了错误消息中的 CLSID,所以,{00020970-0000-0000-C000- 000000000046}
。它的注册表项包含两个项,其中一个称为“TypeLib”,而后者又包含类型库的另一个 CLSID。然后,我再次从头开始搜索注册表,寻找第二个 CLSID,这使我找到了相关的互操作类型库。它有两个条目......8.3 和 8.4,较大的数字对应于更高版本的 Office......我删除了......并立即能够运行我的程序。
最佳答案
我遇到了完全相同的问题。这是我修复它的方法:
转到
HKEY_CLASSES_ROOT\TypeLib\
并搜索 Office.Interop.Excel
。
我找到了 HKEY_CLASSES_ROOT\TypeLib\(guid)\1.8
但它的子节点是空的! 我删除了它 因为 Office 15 不是'它安装在那台机器上,嘿,很快 - 它成功了。
我们的 VSTO 项目安装程序或我们自己的自定义安装程序必须将 1.8 文件夹放在那里。
我在这里找到了解决方案:
关于c# - 在 C# 中创建 Excel 工作簿时出现类未注册错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20397506/