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

Sim*_*vis 35 .net c# 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();
Run Code Online (Sandbox Code Playgroud)

错误的详细信息是

System.InvalidCastException未处理HResult = -2147467262
Message =无法将类型为"Microsoft.Office.Interop.Excel.ApplicationClass"的COM对象强制转换为接口类型"Microsoft.Office.Interop.Excel._Application".此操作失败,因为由于以下错误,对IID为"{000208D5-0000-0000-C000-000000000046}"的接口的COM组件的QueryInterface调用失败:库未注册.(HRESULT的例外情况:0x8002801D(TYPE_E_LIBNOTREGISTERED)).来源= mscorlib程序

我已经在VS 2012附带的Office 14主Interop程序集中创建了对Microsoft.Office.Interop.Excel.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类型库,并且现在已经注册了重复版本.我收到了特定的错误消息

('无法转换_Application'....'TYPE_E_LIBNOTREGISTERED')

在凌乱的卸载之后,然后重新安装旧版本的Office.我通过遵循另一个论坛帖子的建议来解决它,我很遗憾找不到...基本上我在错误消息中搜索了注册表中的CLSID,所以,{00020970-0000-0000-C000-000000000046}.它的注册表项包含两个键,其中一个键称为"TypeLib",后者又包含另一个类型库的CLSID.然后,我再次从头开始搜索注册表,找到第二个CLSID,这导致我进入相关的互操作类型库.它有两个条目.... 8.3和8.4,更大的数字对应于Office的更高版本....我删除了...并立即能够运行我的程序.

stu*_*zor 33

我有同样的问题.以下是我修复它的方法:

HKEY_CLASSES_ROOT\TypeLib\并搜索Office.Interop.Excel.

我发现HKEY_CLASSES_ROOT\TypeLib\(guid)\1.8它的子节点是空的! 我删除了它,因为Office 15没有安装在那台机器上,嘿presto - 它工作.

我们的VSTO项目安装程序或我们自己的自定义安装程序必须将1.8文件夹放在那里.

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

访问COM组件时出错

  • 谢谢。该数字与Office版本有关吗?即1.6 = 2007、1.7 = 2010 1.8 = 2013等? (2认同)

小智 7

我有完全相同的问题.如果您安装了新版本的Office,并且出于某种原因必须安装旧版本而不删除新版本(对于我的情况,我只需要安装Office XP Photo Editor),这就会导致问题.

上下花了3个小时后,最好的方法是修复新版本的Office,一切都恢复正常.

希望此信息有助于您提供相同或类似的方案.

  • 使用office 365(或其他),尝试修复选项,它将重新生成密钥.这解决了我的问题. (2认同)

VBA*_*oIt 7

这里没有提到但可能有用的是 1.XX 的子键也可能导致问题。例如:在Computer\HKEY_CLASSES_ROOT\TypeLib{00020813-0000-0000-C000-000000000046} 下,我有子项1.9。这又具有子项0(或应该)。现在,在此之下,有两个子项 - Win32Win64。结果,Visual Studio 无法解析 Microsoft.Office.Interop.Excel.dll 的位置 - 它正在读取两个子项,而它只能读取一个。删除 Win32 子项完全解决了我的问题。请注意,这是在完全重新安装 VS 2017 和 Office 365 Pro Plus 后完成的。希望这可以帮助某人。


小智 6

我将在我遇到的两台机器上确认@stuzor的答案.

背景:

Windows7 64 bit
Office 2010 (32bit) 
Lync 2013 
Run Code Online (Sandbox Code Playgroud)

HKEY_CLASSES_ROOT\TypeLib \,搜索"Office.Interop.Excel".找到了几乎不存在的"1.8"文件夹.删除后,旧的VB.net应用程序中的功能立即开始工作.