c# - 在 C# 中创建 Excel 工作簿时出现类未注册错误

标签 c# .net excel excel-interop

当我尝试使用以下代码访问 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 无济于事,但找到了这个有效的解决方案。这是在

http://social.msdn.microsoft.com/Forums/vstudio/en-US/d3f92da7-96d3-404b-89d0-d236800ceae5/vs-2012-rc-and-visual-studio-tools-for-office?forum=vsto

问题是来自多个版本的 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 文件夹放在那里。

我在这里找到了解决方案:

Error accessing COM components

关于c# - 在 C# 中创建 Excel 工作簿时出现类未注册错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20397506/

相关文章:

c# - 用于大型应用程序的 UML 建模工具

php - 如何在下拉列表值中添加逗号?

c# - 遍历对象集合 c#

C#MVC : How to override configured authentication redirect?

c# - 命名元组定义中的自定义名称成为默认名称 "Item1"和 "Item2"

c# - 带有默认构造函数的 Unity Framework IoC

c# - 为什么 Thread.Start 会抛出 OutOfMemoryException

asp.net - MVC 4 ApiController 和异步并发

excel - 保存工作簿失败

arrays - 长数组 VBA 问题