我有一个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 Application的权限。我的网站设置为通过安全,所以我添加了自己;我是服务器上的管理员,因此我确保管理员可以访问;我还添加了App Pool默认的Network Service;还有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());
}
}
答案 0 :(得分:2)
不建议使用Office自动化 - 使用这些Excel.Application和Excel.Workbook对象,not supported by Microsoft。看:
Microsoft目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office可能会出现不稳定Office在此环境中运行时的行为和/或死锁。
这意味着,即使您要解决服务器端/客户端问题,您仍然会玩火,因为某些情况可能有效,有些则不然,其他情况有时会有效,有时会导致您的进程挂起,因为当没有控制台用户登录到服务器时,Excel会尝试打开弹出通知。相信我,不要这样做。
我提供的链接列出了您尝试执行的操作的几种替代方法,但假设您计划为用户构建相对简单的Excel工作表,那么最好只创建CSV file并发送返回给用户使用适当的标题(类似Response.ContentType="application/vnd.ms-excel"
),以便默认情况下Excel将打开返回的数据。
您可以看到该问题的更多答案here。
答案 1 :(得分:2)