3

我有一个 C# .net 网络应用程序。我希望用户单击网页上的按钮,服务器打开 Excel 电子表格并将数据写入其中,用户保存文档。这可以使用 Visual Studio 2010 和 Office 2010 在本地工作。但是,在我的服务器上,我收到此错误:

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

我研究并发现了大量的答案,说明打开 dcomconfig 并将具有权限的用户添加到 Microsoft Excel 应用程序。我的网站设置为直通安全,所以我添加了自己;我是服务器的管理员,所以我确保管理员可以访问;我还添加了网络服务的应用程序池默认值;还有 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());
        }
    }
4

2 回答 2

5
  1. 在 DCOMCNFG 中,右键单击我的电脑并选择属性。
  2. 转到组件/MyComputer/DCOMConfig
  3. 转到 Microsoft Excel 应用程序属性安全性
  4. 在启动和激活权限中,单击“自定义”并向其添加网络服务并授予其“本地启动”和“本地激活”权限。提供与访问权限和配置权限相同的权限 按 OK 就可以了。我现在可以运行我的应用程序了。
于 2015-11-06T05:57:49.290 回答
2

办公自动化——这些 Excel.Application 和 Excel.Workbook 对象的使用——不被微软推荐和支持。看:

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

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

我提供的链接列出了您尝试做的几个替代方案,但假设您计划为您的用户构建相对简单的 Excel 工作表,您最好只创建一个CSV 文件并将其发送回用户适当的标题(类似于Response.ContentType="application/vnd.ms-excel"),以便默认情况下 Excel 打开返回的数据。您可以在此处查看该问题的更多答案。

于 2013-02-05T20:23:39.197 回答