Excel操作服务器端配置

首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

Excel操作服务器端配置

作者:  时间: 2011-04-10

§错误:

      检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

异常详细信息: ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}\ASPNET,在 IIS 6 上为网络服务)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。

      要将 ASP.NET 访问权限授予某个文件,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示 ASP.NET 帐户,选中所需访问权限对应的框。

 

§分析:
      在Visual Studio环境中运行始终正常,但当项目部署到IIS后便会出现此错误。

      异常详细信息中的“ASP.NET 未被授权访问所请求的资源,请考虑授予 ASP.NET 请求标识访问此资源的权限”基本上说明了报错的原因。

      在Visual Studio环境中ASP.NET进程为WebDev.WebServer.exe,其具有访问Office COM组件的权限,故而正常。而在IIS的环境下,相应的ASP.NET进程(IIS5为ASPNET,IIS6为NetWork Service)不具有此访问权限。

 

解决办法:
     1、 开始—〉运行中输入dcomcnfg.exe,启动组件服务。
     2、 组件服务—〉计算机—〉我的电脑—〉DCOM配置,在其中找到Microsoft Excel Application,在其上右键—〉属性。
     3、 安全选项卡—〉启动和激活权限处选中“自定义”并编辑,添加NetWork Service用户,并为其赋予“本地启动”和“本地激活”权限。如下图:


     4、 安全选项卡—〉访问权限处选中“自定义”并编辑,添加NetWork Service用户,并为其赋予“本地访问”权限。如下图:


     5、 标识选项卡—〉选中“交互式用户”。

 

 

     该问题解决,但新的问题出现:


错误:
      无法将类型为“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))。

 

解决过程:
      程序中引用的Microsoft.Office.Interop.Excel版本为14,服务器端安装Office 2007。

      经网络查询,此问题源自服务端Office COM组件,建议修复Office或重新安装。

 

      @  修复Office 2007,问题依旧。
      @  重新安装Office 2007,问题依旧。

 

      继续搜寻解决问题的办法,有文章提到“Office 2007对应的Microsoft.Office.Interop.Excel版本为12,Office 2003对应的Microsoft.Office.Interop.Excel版本为11”。

 

      @  将程序引用的Microsoft.Office.Interop.Excel版本调整为12,但问题依旧。

 

      没有头绪,尝试一个不是办法的办法。

 

      @  卸载Office 2007,安装Office 2003,问题竟然解决。

 

发现的问题:
      经测试,服务器端安装的Office版本与引用的Microsoft.Office.Interop.Excel版本之间并无直接的对应关系。当服务器端安装Office 2003时,无论引用的Microsoft.Office.Interop.Excel的版本是11、12还是14,运行均正常。当安装Office 2007,无论哪个版本均发生该错误。

 

猜测性分析:
      Microsoft.Office.Interop.Excel 11、12对应的运行时为1.1,而Microsoft.Office.Interop.Excel 14对应的是2.0。这三个版本的dll均对应Office 2003提供的Office COM组件。

      而支持Office 2007 COM组件的引用则应为更高版本。

      以上分析均为猜测,并为经过测试检验或找到权威的说明。

 

作者: iSun 发表于 2011-04-10 23:03 原文链接

评论: 0 查看评论 发表评论


最新新闻:
· 网页推荐引擎StumbleUpon月点击量超10亿次(2011-04-10 20:55)
· 让开发者大会变得更“社会化”:微软的 MIX 应用程序(2011-04-10 20:22)
· Oracle为JDK 8寻求社区参与(2011-04-10 20:06)
· MIX11: Silverlight 5,Windows Phone,IE9,HTML5及直播预告(2011-04-10 19:57)
· Groklaw宣布胜利,将于5月16日关闭(2011-04-10 18:58)

编辑推荐:非战之罪,从永中Office谈起

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库