跳至页脚内容
使用 IRONXL

如何在 C# 中创建 Excel 文件:Interop 与 IronXL

简介

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

快速比较概述

特征

Excel互操作性

IronXL

EPPlus

ClosedXML

NPOI

GemBox

Aspose

需要安装 Excel

服务器部署

不推荐

平台支持

仅限 Windows 系统

跨平台

跨平台

跨平台

跨平台

跨平台

跨平台

XLS 支持

XLSX 支持

学习曲线

简单的

简单的

简单的

缓和

简单的

缓和

商业许可

办公许可证

来自 $liteLicense

449欧元起

免费(MIT)

免费(Apache)

590欧元起

999美元起

内存效率

贫穷的

出色的

好的

好的

贫穷的

出色的

好的

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

为什么要超越 Excel互操作性?

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 消除了这些复杂性,提供现代化的、直观的 Excel 自动化 API,无需 Microsoft Office:

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 文件:Interop 与 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.Set无nCommercialPersonal("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.Set无nCommercialPersonal("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

如何在 C# 中创建 Excel 文件:Interop 与 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 文件:Interop 与 IronXL:图 3 - ClosedXML 输出

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 文件:Interop 与 IronXL:图 4 - NPOI 输出

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 商业许可证的项目。 ClosedXML 适用于具有基本电子表格需求且没有图表需求的开源项目。 当 XLS 支持至关重要且必须最大限度地降低许可成本时,NPOI 仍然具有相关性。

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

从 Interop 迁移到 IronXL

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

  1. 移除 COM 引用 - 将Microsoft.Office.Interop.Excel引用替换为 IronXL
  2. 简化对象创建——用直接创建工作簿取代应用程序/工作簿/工作表层级结构。
  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

常见问题解答

使用C#中的Excel Interop有哪些局限性?

在C#中使用Excel Interop可能受到其依赖于Microsoft Excel安装、潜在的性能问题和缺乏跨平台支持的限制。IronXL为电子表格操作提供了更高效且通用的替代方案。

为什么我应该考虑使用IronXL而不是Excel Interop?

IronXL提供了更健全的解决方案,具有跨平台能力、更快的性能和降低的内存使用。它不需要在服务器上安装Excel,使其更适合服务器端应用。

IronXL可以高效处理大型数据集吗?

是的,IronXL经过优化,可以高效处理大型数据集。相比Excel Interop,它提供了更好的性能和内存管理,非常适合处理海量数据。

IronXL与.NET Core兼容吗?

IronXL完全兼容.NET Core,允许开发人员创建跨平台工作的应用程序,而无需依赖Microsoft Excel安装。

IronXL 的许可选项有哪些?

IronXL提供灵活的许可选项,包括单个开发者、团队和企业许可,使其适合不同的项目规模和预算。

IronXL支持导出数据到Excel格式吗?

IronXL支持导出数据到多种Excel格式,如XLS、XLSX和CSV,为各种数据操作和展示需求提供灵活性。

我可以使用IronXL进行自动化Excel报告生成吗?

是的,IronXL专门为实现自动化Excel报告生成而设计,提供了数据过滤、图表创建和公式处理等功能以简化报告任务。

IronXL在Excel操作中如何确保数据准确性?

IronXL通过其可靠的公式处理和单元格格式化功能确保数据准确性,最大限度地减少错误并在Excel操作中保持数据完整性。

IronXL支持哪些编程语言?

IronXL主要为C#设计,但也支持其他.NET语言,使其对于使用.NET生态系统的开发人员非常通用。

IronXL是否提供客户支持?

IronXL提供全面的客户支持,包括文档、教程和直接协助,确保开发人员能够有效地在项目中使用该库。

Curtis Chau
技术作家

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

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