C# 操作excel 常见问题解决方案

本文介绍了解决C#与Excel互操作时出现的COM对象强制转换错误的方法。问题通常由安装不同版本Office或WPS导致。文章提供了清理注册表及调整WPS和Office共存状态的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、C#与excel互操作的错误无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制
如果您使用的电脑要操作的是office2003而之前使用过office2007使用此方法可解决您的问题
无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application”。此操作失败的原因是对 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 库没有注册。 (异常来自 HRESULT:0x8002801D (TYPE_E_LIBNOTREGISTERED))。英文版的异常消息如下:
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: could not be found. (Exception from HRESULT: 0x80030002 (STG_E_FILENOTFOUND)).
 
出现的原因可能是安装office时安装过不同版本造成的
 
本人安装的是office 2003,并安装过office2007的兼容包,也安装过office visio 2007
 
解决办法:
 
在注册表中找到:
 
?HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}\1.6 删除之
 
就可以了。
 
因为我用的是office 2003对应的是1.5,所以删除1.6
 

office 2007对应的是1.6,所以要根据情况判断。


2、

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,看到以下链接:

http://bbs.youkuaiyun.com/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的映射关系,所以问题才得以解决。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值