最近因为项目的需要写了一个应用,目的是在B/S架构下实现数据从Excel文档中载入到数据库。在本地开发的时候一切正常,当部署到测试环境下运行的时候出现如下的错误:“检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005”。
这是最简单的一种问题,我一看这个错误就知道是属于组件配置的范畴,可是我没有想到这个问题解决了以后更让我郁闷的事情还在后面。
先说一下“错误80070005”怎么解决(前提是Office2007必须正确安装),解决的办法很简单,就是改配置,在命令行中输入dcomcnfg.exe,在“组件服务-我的电脑-找到Microsoft Excel应用程序(在某些版本下会显示Microsoft Excel Application)这一项对其进行配置,步骤如下:
1. 以管理员身份登录到计算机,并使用完整安装来安装(或重新安装)Office。为了实现系统的可靠性,建议您将 Office CD-ROM 中的内容复制到本地驱动器并从此位置安装 Office。
2. 启动要自动运行的 Office 应用程序。这会强制该应用程序进行自我注册。
3. 单击安全选项卡。验证使用默认的访问权限和使用默认的启动权限已选中。
4. 单击确定,关闭属性对话框并返回主应用程序列表对话框。
5. 在 DCOM 配置对话框中,单击默认安全性选项卡。
6. 单击访问权限的编辑默认值。验证访问权限中是否列出下列用户,如果没有列出,则添加这些用户:
SYSTEM
INTERACTIVE
Everyone
Administrators
IUSR_<machinename>*
IWAM_<machinename>*
Network Services
ASPNET
* 这些帐户仅在计算机上安装了 Internet Information Server (IIS) 的情况下才存在。
7. 确保允许每个用户访问,然后单击确定。
8. 单击启动权限的编辑默认值。验证启动权限中是否列出下列用户,如果没有列出,则添加这些用户:
SYSTEM
INTERACTIVE
Everyone
Administrators
IUSR_<machinename>*
IWAM_<machinename>*
Network Services
ASPNET
* 这些帐户仅在计算机上安装有 IIS 的情况下才存在。
9. 确保允许每个用户访问,然后单击确定。
10. 单击确定关闭 DCOMCNFG。
这样配置一番以后再运行OK,于是我的心情很晴朗(我行,我不是一般人)。可是过了一段时候,产品组又说Excel的数据载入功能又不能用了,我运行一番竟然还是这个错误“检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005”。我打开DCOM配置查看,发现和我上一回的配置是完全一样的没有做任何改动,可是运行还是会出现这个错误,我就郁闷了。于是我到网上遍查资料,结果没有一个可以用的,他们出现的问题,都是我曾经解决过的。
于是在DCOM中我打开Microsoft Excel Application重新进行设置,在“标识”标签里选择“下列用户”进行运行。因为我听说这台服务器已经加入域,并且域名是Nanjing.com.cn,于是我就尝试使用nanjing"administrator来运行。

关机,重启,重新运行程序,80070005这个错误终于不出现了,可是出现了一个更要命的错误。“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application”。此操作失败的原因是对 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。
如果是出现这种错误就很可能是我的组件有问题,要知道那是一个超级复杂的组件,类图就用了很多篇幅。我打开代码仔细的检查,在别人的环境上运行,还是没有问题,我把代码全部屏蔽,只留了一条调用Excel组件的语句,又运行还是报这个错误。
最后只能重新安装Office组件,再试成功了。
当出现类似问题的时候,
1,检查Office组件安装成功否。
2,如果是在B/S构架下进行访问请先给Office组件分配合理的权限(Network Services),如果在域环境下还要考虑域权限。
3,要有自信,找出问题的原因,如果怀疑是自己的代码,可以只留几条调用Excel组件的语句,如果还是报错那肯定就是环境问题。
4,我使用的名字空间是Microsoft.Office.Interop.Excel;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2006-03-17 C#和Sql的时间操作心得(一)
2006-03-17 读写文件之日志文件
2006-03-17 DataGrid中DropDownList的动态绑定和触发DropDownList事件