25

在我的 C# 应用程序中,借助 Excel Interop dll(作为参考),我正在读取/写入 excel 文件。如果我将此程序移动到未安装 office/excel 的系统(想想干净的机器),我会遇到以下错误。

System.Runtime.InteropServices.COMException (0x80040154):检索具有 CLSID {00024500-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(来自 HRESULT 的异常:0x80040154(REGDB_E_CLASSNOTREG) ))。

由于目标机器上没有 excel,因此预计会出现上述错误。
我的问题是,除了在目标机器上注册 Interop dll 之外,还有其他方法可以使用我的程序吗?

4

4 回答 4

25

我的问题是,除了在目标机器上注册 Interop dll 之外,还有其他方法可以使用我的程序吗?

当运行您的程序的计算机上未安装 Excel 时,您询问是否有任何方法可以使用您的程序,该程序使用 Excel 互操作。最简洁的答案是不。更长的答案是肯定的,如果您愿意重构您的程序以不使用互操作。

如果您的目标 Excel 版本是 2007 及更高版本,则可以使用 Microsoft 提供的OOXml SDK 。如果你愿意花一点钱,你也可以使用Aspose等第三方库。

可以在microsoft docs中找到使用 OOXml SDK 将电子表格插入 excel 文件的示例。

// Given a document name, inserts a new worksheet.
public static void InsertWorksheet(string docName)
{
    // Open the document for editing.
    using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true))
    {
        // Add a blank WorksheetPart.
        WorksheetPart newWorksheetPart = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>();
        newWorksheetPart.Worksheet = new Worksheet(new SheetData());

        Sheets sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>();
        string relationshipId = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart);

        // Get a unique ID for the new worksheet.
        uint sheetId = 1;
        if (sheets.Elements<Sheet>().Count() > 0)
        {
            sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1;
        }

        // Give the new worksheet a name.
        string sheetName = "Sheet" + sheetId;

        // Append the new worksheet and associate it with the workbook.
        Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName };
        sheets.Append(sheet);
    }
}
于 2012-09-11T19:03:39.077 回答
16

甚至Microsoft 也不建议在服务器上使用 Interop 库。所以最好找一些替代框架来为你做 Excel。我过去曾为此成功使用过 Npoi

我知道这不是您的例外的答案。但老实说,Interop 是通往无穷无尽的麻烦和神秘的异常消息的途径。

2017 年更新:我已经有一段时间没有使用 NPOI 并将我的所有项目移动到EPPlus insted - 基于 OpenXML 的库,可以为您创建现代 xlsx 文件。

于 2012-09-11T18:52:56.330 回答
0

您可以使用 RegSrv32 注册您的 COM

链接:http: //msdn.microsoft.com/en-us/library/ms859484.aspx

您有义务在使用之前注册您的 COM

于 2012-09-11T18:44:59.860 回答
0

根据我前一段时间需要与服务器上的 Excel 文件交互时所做的所有研究,您必须安装 Office。

于 2012-09-11T18:45:31.170 回答