2

我的 asp 项目 (C#) 有问题。

我有以下错误:由于以下错误,检索具有 CLSID {00024500-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败:当我尝试从服务器生成 Excel 文件时抛出 80040154。我已经看过一些关于它的帖子,我不知道它们是否适用于我,也无法解决我的问题。让我向您展示我的代码并解释一下。

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 文件时遇到了这个问题,但当我使用本地版本运行调试模式时却没有(代码有效)。我公司的所有工作站都在计算机上安装了 MS Office Excel,但没有在我使用的服务器上安装,我的问题是有没有不必在服务器上安装 Excell 的解决方案?

我尽量避免在服务器上安装 Excel,因为服务器不是来自我的服务,所以我想避免它(但如果它是唯一(和最好/安全)的解决方案,我会这样做)如果可以的话。我尝试将库复制到服务器上的程序集文件夹中(因为所有工作站都相同,所以引用应该工作?)但我找不到我必须授予允许从服务器访问库的权限(我希望我没有解释得太糟糕)。

提前致谢,

编辑:有一件事我不明白,那就是在之前已经编写的代码中,可以像这样启动 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 制作了文件......如果我能找到使用服务器上安装的程序集的权限,知道所有工作站有 Excel,我应该可以像这段代码那样使用它吗?

4

2 回答 2

4

MS 在服务器场景中不支持互操作

有许多选项可以读取/编辑/创建 Excel 文件,而无需在服务器上进行互操作/安装 Excel:

MS 提供免费的 OpenXML SDK V 2.0 - 请参阅http://msdn.microsoft.com/en-us/library/bb448854%28office.14%29.aspx(仅限 XLSX)

这可以读写 MS Office 文件(包括 Excel)。

另一个免费选项参见http://www.codeproject.com/KB/office/OpenXML.aspx(仅限 XLSX)

如果您需要更多处理旧 Excel 版本(如 XLS,不仅是 XLSX)、渲染、创建 PDF、公式等,那么有不同的免费和商业库,如ClosedXML(免费,仅限 XLSX)、EPPlus(免费,仅限 XLSX) , Aspose.Cells , SpreadsheetGear , LibXLFlexcel等。

于 2013-01-04T16:12:22.077 回答
0

由于我的实习这周结束了(是的,找到这样的东西有点晚了),我现在不能做任何新的事情,已经太晚了,所以我将恢复更改并使用之前创建 Excel 文件的过程(即不过我已经改进了)。

我相信,解决此问题的方法可能是授予使用服务器中的互操作程序集的权限,然后调用用户 Excel 程序,但我无法设置权限(它不起作用,不知道为什么)。现在为时已晚,我只是做一些维护,确保项目的连续性。

谢谢你们的答案。

于 2013-01-07T15:13:30.280 回答