最近因为项目的需要写了一个应用,目的是在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;

posted on 2007-09-27 15:43  Hi Jew  阅读(4036)  评论(10编辑  收藏  举报