打开excel错误:System.Runtime.InteropServices.COMException(0x80080005):检索与CLSID的组件的COM类工厂

我有一个C#.netnetworking应用程序。 我想要一个用户点击一个网页上的button,服务器打开一个Excel电子表格,并写入数据,并保存该文件的用户。 这在本地使用Visual Studio 2010和Office 2010工作。但是,在我的服务器上,出现此错误:

System.Runtime.InteropServices.COMException(0x80080005):由于以下错误,检索具有CLSID {00024500-0000-0000-C000-000000000046}的组件的COM类工厂失败:80080005服务器执行失败(HRESULTexception:0x80080005(CO_E_SERVER_EXEC_FAILURE ))。

我研究并发现了大量的答案,说明打开dcomconfig并添加具有Microsoft Excel应用程序的权限的用户。 我的网站设置为通过安全,所以我加了我自己; 我是服务器上的pipe理员,所以我确保pipe理员有权访问; 我还添加了networking服务的应用池默认值; 也是ASP.NET机器帐户; 以防万一,在连接到数据库时添加应用程序使用的帐户。 我仍然得到完全相同的错误。

我的服务器是64位,Office 2007,IIS 7。

我的代码是:

{ try { Excel.Application xXL = null; Excel.Workbook xWB = null; Excel.Worksheet xSheet = null; xXL = new Excel.Application(); } catch (Exception ex) { Response.Write(ex.ToString()); } } 

办公自动化 – 这些Excel.Application和Excel.Workbook对象的使用 – 不被推荐,并且不被Microsoft支持 。 看:

Microsoft目前不推荐并不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office可能会出现不稳定的行为和/或在此环境中运行Office时发生死锁。

这意味着,即使你理清你的服务器端/客户端问题,你仍然在玩火,因为一些场景可能工作,其他人不会,其他人有时会工作,有时会导致你的过程挂起,因为当没有控制台用户login到服务器时,Excel尝试打开popup通知。 相信我,不要这样做。

我提供的链接列出了几种替代scheme,但是假设您打算为您的用户构build相对简单的Excel工作表,您最好创build一个CSV文件并将其发回给用户适当的头(类似于Response.ContentType="application/vnd.ms-excel" ),以便返回的数据默认由Excel打开。 你可以在这里看到更多的答案。

  1. 在DCOMCNFG中,右键单击我的电脑,然后select属性。
  2. 转到组件/ MyComputer / DCOMConfig
  3. 转到Microsoft Excel应用程序属性安全
  4. 在启动和激活权限中,单击“Custamize”并添加networking服务,并授予“本地启动”和“本地激活”权限。 提供相同的作为访问权限和configuration权限按确定,就是这样。 我现在可以运行我的应用程序。