最近在客户机器上出现了无法导出报表的问题,错误提示为:
System.InvalidCastException: 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: 加载类型库/DLL 时出错。 (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)).
通过Google搜索此问题,基本都是表示安装过不同版本的office,需要修改注册表删除不同版本的注册表信息,参考链接如下:
点击打开链接
点击打开链接
经过查找注册表未发现有其他版本office的残留信息,而且HKEY_CLASSES_ROOTinterface 下的GUID'{000208D5-0000-0000-C000-000000000046}‘对应的TypeLib竟然不是office而是WPS的,并且WPS安装目录下不存在此项,于是就把HKEY_CLASSES_ROOTinterface 下的GUID'{000208D5-0000-0000-C000-000000000046}‘对应的TypeLib改成了office的GUID![](https://www.cnblogs.com/tianshuilv/admin/)
修改之后
修改保存之后错误提示变成了:
System.Runtime.InteropServices.COMException (0x8002801D): 库没有注册。
然后尝试手工注册EXCEL.EXE,注册失败。,没办法只能再次求助Google,看到以下链接:
http://bbs.csdn.net/topics/390622891
发现跟我出现的问题出奇的相似,按照上面说的卸载了客户机上的WPS,重装了office2010,悲催的是问题依旧。
经过多般折腾,还是没什么更好的办法。后来又重新看了一遍之前查的资料,基本可以确定就是WPS抢鲜版的问题,然后我就在WPS官网下载了个个人版安装上,竟然神奇的解决了~~~
结束语:其实说到底这个问题就是由于WPS恶意更改了office的Com组件注册权限,使得office的com组件不能注册,所以WPS和office还是不要一起用了,据我个人猜测产生这个问题的原因可能是:客户刚开始安装了WPS早期版本,而我们的售后服务人员给客户安装软件的时候安装了office2010,这个时候是没有问题的,但是长时间后客户进行了WPS的升级升级到了最新版,WPS最新版让office的com组件注册失效,所以出现了无法加载DLL的错误,而这次我重装office并没有使office成功注册,即使卸载了WPS还是没能成功注册COM组件,因为注册表里可能还残留WPS的信息,所以导致注册表中的关于调用Excel的注册信息混乱,因此当我重装WPS之后WPS的注册信息又重新写入注册表并且替换了office的映射关系,所以问题才得以解决。