当我尝试使用以下代码访问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无济于事,但发现这个解决方案,这是有效的.它在
问题是来自多个版本的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的更高版本....我删除了...并立即能够运行我的程序.