当我尝试使用以下代码访问Excel电子表格时,当使用Visual 2012中安装了Office2007(Ver12)的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未处理HResult=-2147467262 将'Microsoft.Office.Interop.Excel.ApplicationClass‘类型的COM对象转换为接口类型'Microsoft.Office.Interop.Excel._Application'.的Message=Unable此操作失败,因为对IID‘{000208D5-0000-0000-C000-000000000046}的接口的COM组件的QueryInterface调用失败,原因是以下错误:库未注册。( HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)除外)。Source=mscorlib
我已经在Office 14主互操作程序集中创建了一个引用,该程序集包括VS 2012以及Office 12版本的dll,但这两种方法都没有解决问题。我试过用regasm注册dlls,但这也没有帮助。
我可以用Office 14和Office 12 dll在下面的行上创建worksheet,所以这个问题似乎只影响工作簿的定义。
2013年12月17日
尝试重新安装Office 2007,但没有效果,但找到了此解决方案,效果良好。那是在
问题是来自Office的多个版本的代码--我有来自Office 14的代码,可能来自VS 2012的安装
我怀疑VS 2012 RC已经安装了Office 2013类型库,并且现在已经注册了重复版本。我收到了具体的错误消息
(“无法转换应用程序”.“类型:E_LIBNOTREGISTERED”)
在混乱的卸载之后,然后重新安装一个旧版本的Office。我按照另一个论坛线程的建议解决了这个问题,遗憾的是,我无法find...basically,我在错误消息中搜索注册表以查找CLSID,所以,{00020970-0000-0000-C000-000000000046}
。它的注册表项包含两个键,其中一个名为'TypeLib',而后者又包含类型库的另一个CLSID。然后,我从第二个CLSID开始搜索注册表,这导致我找到了相关的互操作类型库。它有两个条目.8.3和8.4,与后来版本的Office....which i deleted...and相对应的更大的数字立即能够运行我的程序。
发布于 2014-05-28 15:49:51
我也有同样的问题。我就是这样修好的:
去
HKEY_CLASSES_ROOT\TypeLib\
和搜索Office.Interop.Excel
。
我找到了HKEY_CLASSES_ROOT\TypeLib\(guid)\1.8
,但是它的子节点是空的!我删除了,因为Office 15没有安装在那台机器上,嘿,它工作了。
无论是我们的VSTO项目安装程序,还是我们自己的自定义安装程序,都必须将1.8文件夹放在那里。
我在这里找到了解决办法:
发布于 2015-04-28 04:40:37
我也有同样的问题。如果您已经安装了Office的新版本,并且由于某些原因,您必须安装旧版本而不删除新版本(就我的情况而言,我只需要安装Office照片编辑器),这就导致了这个问题。
在上上下下花了3个小时之后,最好的方法是修复Office的新版本,一切都恢复正常了。
如果你有相同或相似的情况,希望这个信息能有所帮助。
发布于 2018-01-31 14:37:29
这里没有提到但可能有用的一点是,1.XX的子项也会引起问题。例如:在Computer\HKEY_CLASSES_ROOT\TypeLib{00020813-0000-0000-C000-000000000046}下,我有一个子项1.9。这反过来又有子键(或应该)。下面是的两个子项-- Win32和Win64。因此,Visual无法解析Microsoft.Office.Interop.Excel.dll的位置--它正在读取两个子项,其中只能读取一个子项。删除Win32子键完全修复了我的问题。请注意,这是在VS 2017和Office 365 Pro Plus的完整重新安装之后完成的。希望这能帮上忙。
https://stackoverflow.com/questions/20397506
复制相似问题