Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12405763
  • 博文数量: 1293
  • 博客积分: 13501
  • 博客等级: 上将
  • 技术积分: 17974
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 18:11
文章分类

全部博文(1293)

文章存档

2019年(1)

2018年(1)

2016年(118)

2015年(257)

2014年(128)

2013年(222)

2012年(229)

2011年(337)

分类: C#/.net

2015-03-13 18:31:30

最近在客户机器上出现了无法导出报表的问题,错误提示为:

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_ROOT\interface 下的GUID'{000208D5-0000-0000-C000-000000000046}‘对应的TypeLib竟然不是office而是WPS的,并且WPS安装目录下不存在此项,于是就把 HKEY_CLASSES_ROOT\interface 下的GUID '{000208D5-0000-0000-C000-000000000046}‘对应的TypeLib改成了office的GUID 

修改之后
修改保存之后错误提示变成了:

System.Runtime.InteropServices.COMException (0x8002801D): 库没有注册。

然后尝试手工注册EXCEL.EXE,注册失败。,没办法只能再次求助Google,看到以下链接:

发现跟我出现的问题出奇的相似,按照上面说的卸载了客户机上的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的映射关系,所以问题才得以解决。

 

转自博客:

 

参考博客:

阅读(2981) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~