asp excel错误80040154
我有一个与我的asp项目(C#)的问题。
我遇到以下错误:使用CLSID {00024500-0000-0000-C000-000000000046}检索组件的COM类工厂失败,原因如下:80040154当我尝试从服务器生成excel文件时抛出。 我已经看到一些关于它的post,我不知道他们是否适用于我,也不能解决我的问题。 让我告诉你我的代码并解释。
using Excel = Microsoft.Office.Interop.Excel; using System.Reflection; private Excel.Application oXL; private Excel._Workbook oWB; private ExcelFile f; protected void bExcel_Click(object sender, EventArgs e) { if (Session["mode"] == null) Response.Redirect(accueil); // Set the values oXL = new Excel.Application(); oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value)); f = new ExcelFile((Excel._Worksheet)oWB.ActiveSheet); oXL.Visible = true; /* displaying data from a gridview, non revelant here (?) */ oXL.Visible = true; f = null; oXL = null; oWB = null; }
和错误的解释(第225行):
Erreur source: Ligne 224 : // Set the values Ligne 225 : oXL = new Excel.Application(); Ligne 226 : oWB = (Excel._Workbook) oXL.Workbooks.Add(Missing.Value)); Ligne 227 : f = new ExcelFile((Excel._Worksheet)oWB.ActiveSheet);
好的,所以当我尝试从服务器生成excel文件时遇到此问题,但是当我使用本地版本(代码工作)运行debbugging模式时没有这个问题。 我公司的所有工作站都在计算机上安装了MS Office Excel,但不是我正在使用的服务器,而且我的问题是, 是否有解决scheme,无需在服务器上安装Excell?
我试图避免在服务器上安装Excel,因为服务器不是从我的服务,所以我想避免它(但如果它是唯一的(和最好的/安全的)解决scheme,我会做到这一点),如果我可以。 我试图复制在服务器上的程序集文件夹中的库(因为所有的工作站是相同的,引用shoud工作?),但我不能find我必须允许从服务器访问库的权限(我希望我没有解释得太糟糕)。
提前致谢,
编辑:有一件事,我不明白,这是在以前的代码已被写入,Excel应用程序可以像这样启动:
Response.Clear(); Response.Buffer = true; Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename=registrationData.xls"); // Pour les caractères spéciaux (é, à, etc...) Response.ContentEncoding = System.Text.Encoding.Unicode; Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); using (StringWriter sw = new StringWriter()) using (HtmlTextWriter htw = new HtmlTextWriter(sw)) { Table table = new Table(); TableRow tRow = new TableRow(); /* Adding each information of the grid using tRow.Cells.Add() */ table.RenderControl(htw); // Response needs the Htmlwriter HttpContext.Current.Response.Write(sw.ToString()); HttpContext.Current.Response.End(); }
这是工作,没有安装Excel,因为(我不知道,但它只调用Excel应用程序,填充缓冲区(StringWriter)。 但我不想使用表格,因为表格使用起来很乏味,而且我已经使用Interop创build了这个文件…如果我能find使用服务器上安装的程序集的权限,那么知道所有的工作站有Excel,我应该能够使用它的方式,这种代码使用?
Interop在MS的服务器场景中不受支持 。
在服务器上没有Interop /安装Excel的情况下,有很多选项可以读取/编辑/创buildExcel文件:
MS提供免费的OpenXML SDK V 2.0 – 请参阅http://msdn.microsoft.com/zh-cn/library/bb448854%28office.14%29.aspx (仅限XLSX)
这可以读取+写入MS Office文件(包括Excel)。
另一个免费的选项见http://www.codeproject.com/KB/office/OpenXML.aspx (仅限XLSX)
如果您需要处理较旧的Excel版本(如XLS,而不仅仅是XLSX),渲染,创buildPDF,公式等,那么您可能需要更多的免费和商业库,如ClosedXML (免费,仅限XLSX), EPPlus (免费,仅限XLSX) , Aspose.Cells , SpreadsheetGear , LibXL和Flexcel等。
由于我的实习在本周结束(是的,有点晚,find这样的东西),我现在不能做任何新的工作,已经太晚了,所以我只是恢复变化,并使用以前的创buildExcel文件的过程我虽然改善了)。
我相信,解决这个问题的方法可能是授予从服务器使用Interop程序集的权限,然后调用用户的Excel程序,但我无法设置权限(它没有工作,不知道为什么)。 现在已经晚了,我只是做一些维护工作,保证项目的连续性。
谢谢你们的答案。