• C#导入Excel2010出现加载DLL失败或者类库未注册的问题,0x8002801D或者0x80029C4A .


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

    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
     
    修改之后

     
    修改保存之后错误提示变成了:
     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的映射关系,所以问题才得以解决。
  • 相关阅读:
    插入排序
    JavaMail学习笔记
    Struts2的工作原理
    我的快速排序
    截取字符串,只截取前N个字节的字符
    修改MyEclipse8.6中的Servlet.java模板
    Java类装载的过程及原理介绍
    cmd检查jdk的版本
    快速排序
    flash 侦测人的面部
  • 原文地址:https://www.cnblogs.com/tianshuilv/p/3529670.html
Copyright © 2020-2023  润新知