使用以下代码尝试访问Excel电子表格时,我在使用C#从安装了Office 2007(版本12)的Visual Studio 2012中定义工作簿对象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
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)) Source=mscorlib
我已经在附带VS 2012的Office 14主要互操作程序集和Office 12版本的dll中创建了对Microsoft.Office.Interop.Excel.dll的引用,但都没有解决问题。我尝试使用regasm注册dlls,但这也没有帮助。
我可以使用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,这使我找到了相关的interop类型库。它有两个条目....8.3和8.4,更大的数字对应较新的Office版本....我删掉了它们...并立即能够运行我的程序。