跳至页脚内容
与其他组件比较

使用互操作比较在 C# 中创建 Excel 文件:IronXL 和替代库

简介

在许多 C# 应用程序中,以编程方式创建 Excel 文件是一项基本要求。 虽然使用Microsoft.Office.Interop.Excel在 C# 中创建 Excel 文件的传统方法很流行,但它也存在一些局限性,例如需要安装 Microsoft Excel 以及依赖于主互操作程序集。 像IronXL这样的现代 Excel 库替代方案允许您在不使用 Microsoft Office 的情况下创建 Excel 工作簿、处理多个工作表并生成 XLSX 或 CSV 文件。本文比较了不同库处理 Excel 文件创建的方式,并为 .NET 开发人员提供了示例代码和指导。

快速比较概述

特征 Excel 互操作 IronXL EPPlus 封闭式 XML 非营利组织 GemBox 亚斯
需要安装 Excel 是的 No No 没有 No No No
服务器部署 不推荐 是的 是的 是的 Yes 是的 是的
平台支持 仅限 Windows 系统 跨平台 跨平台 跨平台 跨平台 跨平台 跨平台
XLS 支持 是的 是的 No 没有 Yes 是的 是的
XLSX 支持 是的 是的 是的 是的 Yes 是的 是的
学习曲线 简单的 简单的 简单的 缓和 简单的 缓和
商业许可 办公许可证 749美元起 449欧元起 免费(MIT) 免费(Apache) 590欧元起 999美元起
内存效率 贫穷的 出色的 好的 好的 贫穷的 出色的 好的

注意: "Excel 互操作"需要安装 Microsoft Excel 以及主互操作程序集。 其他库,例如 IronXL,允许您创建 Excel 文件、工作簿和工作表,而无需 Office,并且支持 XLSX 文件、CSV 文件和多个工作表。

为什么要超越 Excel Interop?

Microsoft.Office.Interop.Excel 的替代方案至关重要,因为 Excel 互操作 要求在运行应用程序的每台计算机上都安装 Microsoft Excel。 这种依赖关系会给部署带来挑战,尤其是在服务器环境中,因为微软明确警告不要使用 Office 自动化。 不使用 Excel 进行 Interop 操作会导致异常、警告消息或以编程方式创建 Excel 文档的尝试失败。 由于 Excel 作为后台进程运行,应用程序还会遇到 COM 依赖问题、版本冲突和性能不佳等问题。

现代 Excel 库,例如 IronXL,可以消除这些问题。 您可以创建 Excel 文件、向工作表写入数据、生成 CSV 或 XML 文件,以及使用新的 Excel 工作簿,而无需依赖 Office、Excel 应用程序对象或主互操作程序集。 开发人员还可以使用 Visual Studio、Visual Basic 或控制台应用程序项目,在 Windows 或跨平台环境中实现 Excel 自动化。

立即开始使用IronXL 的免费试用版,彻底消除这些依赖项。

使用 Interop 创建 Excel 文件

我们先来看使用 Excel 互操作 的传统方法:

using Excel = Microsoft.Office.Interop.Excel;
// Create Excel application instance
Excel.Application excelApp = new Excel.Application();
Excel.Workbook workbook = excelApp.Workbooks.Add();
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets[1];
// Add data to cells
worksheet.Cells[1, 1] = "Product";
worksheet.Cells[1, 2] = "Price";
worksheet.Cells[2, 1] = "Widget";
worksheet.Cells[2, 2] = 9.99;
// Save and cleanup
workbook.SaveAs(@"C:\temp\products.xlsx");
workbook.Close();
excelApp.Quit();
// Release COM objects
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
using Excel = Microsoft.Office.Interop.Excel;
// Create Excel application instance
Excel.Application excelApp = new Excel.Application();
Excel.Workbook workbook = excelApp.Workbooks.Add();
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets[1];
// Add data to cells
worksheet.Cells[1, 1] = "Product";
worksheet.Cells[1, 2] = "Price";
worksheet.Cells[2, 1] = "Widget";
worksheet.Cells[2, 2] = 9.99;
// Save and cleanup
workbook.SaveAs(@"C:\temp\products.xlsx");
workbook.Close();
excelApp.Quit();
// Release COM objects
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此代码需要安装 Excel,手动清理 COM 对象,并且无法在非 Windows 平台上运行。 处理多个工作表、保存为不同的文件格式或在服务器环境中工作时,复杂性会增加。 这就是为什么许多开发人员都在寻找不需要 Microsoft Office 的 Excel 库的原因。

IronXL 与同类产品相比如何?

IronXL通过现代化、直观的 API 消除了这些复杂性,无需 Microsoft Office 即可实现 Excel 自动化:

using IronXL;
// Create workbook without Excel
WorkBook workbook = WorkBook.Create();
WorkSheet worksheet = workbook.CreateWorkSheet("Products");
// Add data using familiar syntax
worksheet["A1"].Value = "Product";
worksheet["B1"].Value = "Price";
worksheet["A2"].Value = "Widget";
worksheet["B2"].Value = 9.99;
// Apply formatting
worksheet["A1:B1"].Style.Font.Bold = true;
worksheet["B2"].FormatString = "$#,###";
// Save with one line
workbook.SaveAs("products.xlsx");
using IronXL;
// Create workbook without Excel
WorkBook workbook = WorkBook.Create();
WorkSheet worksheet = workbook.CreateWorkSheet("Products");
// Add data using familiar syntax
worksheet["A1"].Value = "Product";
worksheet["B1"].Value = "Price";
worksheet["A2"].Value = "Widget";
worksheet["B2"].Value = 9.99;
// Apply formatting
worksheet["A1:B1"].Style.Font.Bold = true;
worksheet["B2"].FormatString = "$#,###";
// Save with one line
workbook.SaveAs("products.xlsx");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

使用 C# 创建 Excel 文件:IronXL 和其他库的互操作性比较:图 1 - IronXL 输出

IronXL 允许您以编程方式创建 Excel 文件、新工作簿和多个工作表。 您无需安装 Microsoft Excel 或引用主互操作程序集,即可写入数据、显示数据以及处理 XLS、XLSX、CSV 或 XML 文件。 这使其成为一个完全托管的 Excel 库,适用于 .NET Framework、.NET Core、控制台应用程序和跨平台环境。

由于 IronXL 可通过 NuGet 包获取,您可以将其直接添加到 Visual Studio 项目中,无需担心安装 Microsoft Office。您无需管理 Excel 应用程序对象或手动释放 COM 对象,从而降低了出现异常或警告消息的风险。 了解更多关于使用 IronXL 创建 Excel 文件的信息,或探索Excel 公式和计算

立即开始使用 IronXL。
green arrow pointer

与其他图书馆相比如何?

EPPlus实施

EPPlus提供了一个简洁的 API,但从版本 5 开始需要进行许可证配置,正如Stack Overflow 论坛帖子中讨论的那样:

using OfficeOpenXml;
// Set license context (required from v5+)
ExcelPackage.License.SetNonCommercialPersonal("Test");
using (var package = new ExcelPackage())
{
    var worksheet = package.Workbook.Worksheets.Add("Products");
    worksheet.Cells[1, 1].Value = "Product";
    worksheet.Cells[1, 2].Value = "Price";
    worksheet.Cells[2, 1].Value = "Widget";
    worksheet.Cells[2, 2].Value = 9.99;
    package.SaveAs(new FileInfo("products.xlsx"));
}
using OfficeOpenXml;
// Set license context (required from v5+)
ExcelPackage.License.SetNonCommercialPersonal("Test");
using (var package = new ExcelPackage())
{
    var worksheet = package.Workbook.Worksheets.Add("Products");
    worksheet.Cells[1, 1].Value = "Product";
    worksheet.Cells[1, 2].Value = "Price";
    worksheet.Cells[2, 1].Value = "Widget";
    worksheet.Cells[2, 2].Value = 9.99;
    package.SaveAs(new FileInfo("products.xlsx"));
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

使用 Interop 比较在 C# 中创建 Excel 文件:IronXL 和其他库:图 2 - EPPlus 输出

EPPlus 允许您创建 Excel 电子表格、写入和显示数据,并导出为 XLSX 文件或 CSV 文件。 但是它不支持旧版 XLS 格式,商业用途需要商业许可。 使用 .NET Core 或 .NET Framework 的开发人员可以通过 NuGet 包将 EPPlus 集成到 Visual Studio 项目和控制台应用程序中。

封闭式 XML 方法

ClosedXML提供了一个具有直观 API 的开源解决方案:

using ClosedXML.Excel;
using (var workbook = new XLWorkbook())
{
    var worksheet = workbook.Worksheets.Add("Products");
    worksheet.Cell("A1").Value = "Product";
    worksheet.Cell("B1").Value = "Price";
    worksheet.Cell("A2").Value = "Widget";
    worksheet.Cell("B2").Value = 9.99;
    workbook.SaveAs("products.xlsx");
}
using ClosedXML.Excel;
using (var workbook = new XLWorkbook())
{
    var worksheet = workbook.Worksheets.Add("Products");
    worksheet.Cell("A1").Value = "Product";
    worksheet.Cell("B1").Value = "Price";
    worksheet.Cell("A2").Value = "Widget";
    worksheet.Cell("B2").Value = 9.99;
    workbook.SaveAs("products.xlsx");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

使用 C# 创建 Excel 文件:IronXL 和其他库的比较:图 3 - 封闭式 XML 输出

ClosedXML 支持 XLSX 文件和 Excel 工作表,无需安装 Microsoft Office 即可轻松创建 Excel 表格。 它可跨多个工作表运行,处理 CSV 和 XML 文件,并通过 NuGet 包集成到 .NET 项目中。

传统支持方面的 NPOI

NPOI可以处理 XLS 和 XLSX 格式,但其 API 更为复杂:

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
IWorkbook workbook = new XSSFWorkbook();
ISheet worksheet = workbook.CreateSheet("Products");
IRow headerRow = worksheet.CreateRow(0);
headerRow.CreateCell(0).SetCellValue("Product");
headerRow.CreateCell(1).SetCellValue("Price");
IRow dataRow = worksheet.CreateRow(1);
dataRow.CreateCell(0).SetCellValue("Widget");
dataRow.CreateCell(1).SetCellValue(9.99);
using (FileStream file = new FileStream("products.xlsx", FileMode.Create))
{
    workbook.Write(file);
}
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
IWorkbook workbook = new XSSFWorkbook();
ISheet worksheet = workbook.CreateSheet("Products");
IRow headerRow = worksheet.CreateRow(0);
headerRow.CreateCell(0).SetCellValue("Product");
headerRow.CreateCell(1).SetCellValue("Price");
IRow dataRow = worksheet.CreateRow(1);
dataRow.CreateCell(0).SetCellValue("Widget");
dataRow.CreateCell(1).SetCellValue(9.99);
using (FileStream file = new FileStream("products.xlsx", FileMode.Create))
{
    workbook.Write(file);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

使用 C# 创建 Excel 文件:IronXL 和其他库的互操作性比较:图 4 - 非营利组织 输出

NPOI 允许以编程方式创建 Excel 工作表和工作簿,支持多种文件格式,包括 CSV、XLSX 和 XLS 文件。 然而,由于其 Java 的底层特性,与其他 C# Excel 库相比,该 API 的直观性较差。

关键决策因素

何时选择 IronXL

IronXL 非常适合需要跨平台 Excel 库支持、全面的 Excel 功能和专业支持的企业应用程序。 其直观的 API 可减少在未安装 Office 的情况下创建 Excel 文件的开发时间,而强大的性能可高效地处理大型数据集。 内置的公式引擎和对多种格式(XLS、XLSX、CSV、TSV)的支持使其能够灵活满足各种业务需求。

其他考虑因素

EPPlus 非常适合已经使用 4.5.3 或更早版本(最后一个免费版本)的项目,或者已经拥有 EPPlus 商业许可证的项目。 封闭式 XML 适用于具有基本电子表格需求且没有图表需求的开源项目。 当 XLS 支持至关重要且必须最大限度地降低许可成本时,NPOI 仍然具有相关性。

与其他商业选项相比: GemBox.Spreadsheet提供与 IronXL 类似的功能,且价格具有竞争力;而Aspose.Cells则以较高的价格提供丰富的功能。 然而,IronXL 的功能、性能和支持相结合,通常能为 Excel 操作 .NET 项目提供最佳价值。

从 Interop 迁移到 IronXL

从 Excel 互操作 迁移到 IronXL 遵循一个简单的模式。 如需详细指导,请参阅IronXL 文档并查看代码示例

  1. 移除 COM 引用 - 将Microsoft.Office.Interop.Excel引用替换为 IronXL
  2. 简化对象创建 - 用直接创建WorkBook取代Application / Workbook / Worksheet表层级结构
  3. 更新单元格访问方式 - 将Cells[row, col]转换为worksheet["A1"]表示法
  4. 移除清理代码 - 消除Marshal.ReleaseComObject调用
  5. 跨平台测试 - 验证目标部署平台上的功能

对于涉及Excel 图表条件格式的复杂迁移,IronXL 提供全面的支持。

了解局限性

值得注意的是,主互操作程序集 (PIA) 如果没有安装 Excel 就无法运行——它们只是 COM 对象的接口,需要实际的 Office 应用程序才能运行。 这种误解常常导致在将应用程序迁移到服务器或尝试在未安装 Office 的情况下进行 Excel 自动化时部署失败。

在安全性方面,IronXL 定期接受安全审计并保持 DigiCert 认证,提供企业级保护,而不会出现与 COM 接口相关的漏洞。 有关详细的安全信息,请访问IronXL 安全文档

结论

虽然 Excel 互操作 在桌面应用程序中发挥了作用,但现代开发需要比 Excel 库更灵活的替代方案。 IronXL 为创建 Excel 文件提供了最全面的替代方案,无需 Interop,它兼具易用性、企业级功能和跨平台 Excel 支持。

无论您是构建云应用程序、使用 Docker 容器还是开发跨平台解决方案,选择一个不需要安装 Excel 的库对于创建可扩展且易于维护的应用程序都至关重要。 立即下载 IronXL ,彻底改变您的 Excel 自动化工作流程。

今天在您的项目中使用 IronXL,免费试用。

第一步:
green arrow pointer

请注意EPPlus、ClosedXML、NPOI、GemBox 和 亚斯 是其各自所有者的注册商标。 本网站与 EPPlus、ClosedXML、NPOI、GemBox 或 亚斯 没有任何关联,也未获得其认可或赞助。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映的是撰写时的公开信息。

常见问题解答

什么是 Excel Interop,为什么我需要替代方案?

Excel Interop 是一个微软库,用于在 C# 应用程序中操作 Excel 文件。为获得更好的性能、更方便的部署或避免对 Microsoft Office 安装的依赖,可能需要使用替代工具。

IronXL.Excel 在创建电子表格方面与 Excel Interop 相比如何?

IronXL.Excel 提供了比 Excel Interop 更轻便、更快速的替代方案,部署更简单,无需安装 Microsoft Office。它支持广泛的功能,包括直接从 C# 创建、读取和编辑 Excel 文件。

与 Excel Interop 相比,IronXL.Excel 有哪些许可选项?

IronXL.Excel 提供灵活的许可选项,适合不同规模的项目,而 Excel Interop 与 Microsoft Office 许可绑定,可能不适合所有应用部署。

IronXL能在没有安装Microsoft Office的情况下工作吗?

是的,IronXL 不需要在服务器或客户端机器上安装 Microsoft Office,因此非常适合服务器端和云应用程序。

IronXL 是否支持将 Excel 文件导出为其他格式?

IronXL.Excel 支持将 Excel 文件导出为 CSV、TSV、JSON 等格式,为数据的共享和使用提供了多样性。

是否可以用 IronXL 阅读和编辑大型 Excel 文件?

是的,IronXL.Excel 经过优化,可以高效处理大型 Excel 文件,提供快速的处理时间和高水平的性能。

有哪些使用 IronXL 的编码示例?

IronXL.Excel 为各种用例提供了大量的文档和代码示例,包括使用 C# 创建、读取和编辑 Excel 文件。

IronXL.Excel 是否提供了 Excel Interop 所没有的特定功能?

IronXL 提供了基于模板的文件生成、高级样式设计以及无需安装 Office 即可处理 Excel 文件等功能,而这些功能是 Excel Interop 所不具备的。

将 IronXL 集成到现有 C# 项目中有多容易?

IronXL 的设计旨在通过直接的 API 和全面的支持,轻松集成到现有的 C# 项目中,从而降低管理 Excel 文件所需的代码复杂性。

使用 IronXL 的开发人员可以获得哪些支持?

IronXL 提供专门的技术支持、详细的文档和社区论坛,帮助开发人员快速解决遇到的任何问题。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。