Excel操作服务器端配置

§错误:

      检索 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组件的引用则应为更高版本。

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

原文地址:https://www.cnblogs.com/isun/p/2011921.html