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

C# 打开excel错误:System.Runtime.InteropServices.COMException(0x80080005):检索具有CLSID的组件的COM类工厂,c#,.net,excel,C#,.net,Excel,我有一个C#net网络应用程序。我希望用户单击网页上的按钮,服务器打开excel电子表格并向其中写入数据,用户保存文档。这可以使用VisualStudio2010和Office2010在本地工作。但是,在我的服务器上,出现以下错误: System.Runtime.InteropServices.COMException(0x80080005):检索CLSID为{00024500-0000-0000-C000-0000000000 46}的组件的COM类工厂失败,原因是以下错误:80080005服

我有一个C#net网络应用程序。我希望用户单击网页上的按钮,服务器打开excel电子表格并向其中写入数据,用户保存文档。这可以使用VisualStudio2010和Office2010在本地工作。但是,在我的服务器上,出现以下错误:

System.Runtime.InteropServices.COMException(0x80080005):检索CLSID为{00024500-0000-0000-C000-0000000000 46}的组件的COM类工厂失败,原因是以下错误:80080005服务器执行失败(HRESULT异常:0x80080005(CO_E_服务器执行失败))

我已经研究并找到了大量的答案,说明如何打开dcomconfig并将具有权限的用户添加到Microsoft Excel应用程序。我的站点设置为passthrough安全,所以我添加了我自己;我是服务器上的管理员,因此我确保管理员可以访问;我还添加了应用程序池默认的网络服务;还有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目前不建议也不支持从任何无人参与、非交互式客户端应用程序或组件(包括ASP、ASP.NET、DCOM和NT服务)自动化Microsoft Office应用程序,因为在该环境中运行Office时,Office可能会表现出不稳定的行为和/或死锁

这意味着,即使您解决了服务器端/客户端问题,您仍然在玩火,因为有些场景可能会工作,有些场景不会,有些场景有时会工作,有时会导致您的进程挂起,因为当没有控制台用户登录到服务器时,Excel会尝试打开弹出通知。相信我,不要这样做

我提供的链接列出了您尝试执行的操作的几种替代方法,但假设您计划为用户构建相对简单的Excel工作表,那么最好只创建一个表并将其发送回具有适当标题的用户(类似于
Response.ContentType=“application/vnd.ms Excel”
)这样,返回的数据将默认由Excel打开。 你可以看到这个问题的更多答案

  • 在DCOMCNFG中,右键单击“我的电脑”,然后选择“属性”
  • 转到组件/MyComputer/DCOMConfig
  • 转到Microsoft Excel应用程序属性安全
  • 在启动和激活权限中,单击“Custamize”并向其添加网络服务,并授予其“本地启动”和“本地激活”权限。授予与访问权限和协同配置权限相同的权限 按OK,就这样。我现在可以运行我的应用程序了

  • 您的服务器是否安装了Office,或者您是否已随应用程序发布了LIB?有点不清楚:此.NET代码在哪里运行?作为ASP.NET网页的一部分?在服务器端?服务器上是否安装了Excel?您知道服务器端代码不支持Office Automation吗?另外,您确定应用程序中没有混淆服务器端和客户端模型吗?如果代码在服务器上打开Excel,则访问该网页的用户将看不到该代码,它不在他的计算机上。您需要确保目标服务器上安装了/正确的程序集版本。您是否复制了本地程序集或在目标服务器上的
    GAC
    中安装了这些程序集对于安装了x86 Office的x64计算机,您可能需要运行“%windir%\SysWOW64\mmc comexp.msc/32”要访问x86版本的DCOMCNFG