跳至页脚内容
与其他组件比较
IronXL 和 ClosedXML 之间的比较

IronXL 和 ClosedXML 的比较

今天的软件应用程序需要能够创建数据库并生成使用Excel文件的报告。 如今,有许多库可以让用户无需Microsoft Excel即可完成此操作。

在本文中,我们将讨论并比较如何使用两种最流行的库IronXL和ClosedXML,在C# .NET技术中以编程方式处理Microsoft Excel文档,以读取、操作和编写Excel报告。

IronXL 和 ClosedXML 都提供在 .NET 框架中创建、编辑和读取 Excel 文档的方法。 下一个问题是决定哪个C# Excel库最适合您的项目。 本文将帮助您为您的应用程序选择最佳选项。

首先让我们看看这两个库能够提供什么,然后再进入比较本身。

IronXL库

IronXL是一个.NET库,便于使用C#读取和编辑Microsoft Excel文档。 IronXL.Excel 是一个独立的.NET软件库,用于读取多种电子表格格式。 它不需要安装Microsoft Excel,也不依赖于Interop。

IronXL是一个直观的C# API,可以让您在.NET中读取、编辑和创建Excel电子表格文件,性能极快。 IronXL 完全支持 .NET Core、.NET Framework、Xamarin、移动平台、Linux、macOS 和 Azure。

IronXL是C#中领先的.NET Core和.NET Framework Excel电子表格库。

IronXL功能集

  • 加载、读取和编辑来自XLS/XLSX/CSV/TSV的数据
  • 保存和导出为XLS/XLSX/CSV/TSV/JSON
  • System.Data对象:将Excel电子表格视为System.Data.DataSet和System.Data.DataTable对象进行操作。
  • 公式:操控Excel公式,每次编辑工作表时都会重新计算。
  • 范围:易于使用的WorkSheet ["A1:B10"]语法。 直观地组合和创建范围。
  • 排序:对范围、列和行进行排序。
  • 样式:单元格视觉样式、字体、大小、背景图案、边框、对齐和数字格式。

通过此 链接探索更多 IronXL 特性。

ClosedXML

ClosedXML 是一个.NET库,用于读取、操作和编写Excel 2007+ (.xlsx, .xlsm)文件。 它旨在提供一个直观且用户友好的接口来处理基础的OpenXML库。 .xlsx 是一种用于Microsoft Excel的OpenXML基础API电子表格文件格式的文件扩展名。 .xlsm文件支持宏。 .xltm 是宏支持的模板文件。 .xls 格式是专有的二进制格式,而.xlsx 则基于Office OpenXML格式。

ClosedXML是一个用于生成Microsoft Excel报告的.NET库,不需要在运行代码的机器上安装Excel。

ClosedXML 特性

ClosedXML具有用户友好的界面和广泛的API功能,以处理Excel中的内容创建和提取。 通过这些API调用和请求合并,您可以修改Excel工作表或工作簿中的每一个细节。 所有特性列在下面:

  1. 公式
  2. 验证
  3. 超链接
  4. 保护(工作表和单元格级别)
  5. 条件格式化
  6. 冻结窗格
  7. Tables
  8. Ranges
  9. 样式
  10. 页面设置(打印)
  11. 自动筛选器
  12. 注释

本文的其余部分继续如下:

  1. 创建控制台应用程序
  2. 安装IronXL C#库
  3. 安装ClosedXML
  4. 创建并保存新的Excel工作簿和工作表
  5. 读取Excel文件
  6. 使用Excel公式
  7. 结论
  8. 概要和结论

1. 创建控制台应用程序

使用以下步骤创建控制台应用程序:

  • 启动Visual Studio 2022 IDE。
  • 点击 "创建一个新项目。"
  • 在 "创建一个新项目" 页面,选择语言下拉列表中的 C# ,平台列表中的 Windows,以及项目类型列表中的 控制台
  • 从显示的项目模板中选择控制台应用程序(.NET Framework)
创建项目

创建项目

  • 点击下一步
  • 将项目命名为 "DemoApp",然后点击 下一步
DemoApp 项目

DemoApp 项目

  • 附加信息屏幕中,指定您想使用的框架版本。 在这个例子中,我们将使用 .NET Framework 6.0
.NET Framework 6.0

.NET Framework 6.0

  • 点击创建以完成该过程。

现在,项目已创建,我们几乎准备好测试这些库了。 不过,我们仍需要将它们安装并集成到我们的项目中。 让我们先安装IronXL。

2. IronXL C#库安装

您可以使用以下方法下载并安装 IronXL 库

  1. 使用包含NuGet包的Visual Studio。
  2. 手动安装 DLL。

让我们更详细地看一下每个。

2.1. 使用带有NuGet包的Visual Studio

Visual Studio 提供 NuGet 包管理器以便在您的项目中安装 NuGet 包。 您可以通过项目菜单或通过右键点击解决方案资源管理器中的项目访问它。

软件包管理器

软件包管理器

  • 然后,在浏览选项卡 > 搜索 IronXL.Excel > 安装
IronXL NuGet 安装

IronXL NuGet 安装

  • 我们完成了。

2.2. 手动安装DLL

下载并安装IronXL C#库的另一种方法是通过开发者命令行提示符,使用以下步骤安装IronXL NuGet包

  • 打开开发人员命令提示符——通常在Visual Studio文件夹中找到。

输入以下命令:

Install-Package IronXL.Excel
  • 按回车键。
  • 这将下载并安装该包。
  • 重新加载您的Visual Studio项目并开始使用它。

2.3. 添加必要的Using指令

  1. 在解决方案资源管理器中,右键点击 Program.cs 文件,然后点击查看代码。
  2. 将以下using指令添加到代码文件的顶部:
using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

全部完成了! IronXL已下载、安装并准备使用。 但是在此之前,我们应该安装ClosedXML。

3. 安装ClosedXML

要安装ClosedXML包,您可以通过项目中的NuGet或从NuGet包管理器/控制台直接下载它。

For directly installing ClosedXML, click on this link.

3.1. 使用NuGet包管理器/控制台

从项目解决方案资源管理器中打开NuGet包管理器,浏览ClosedXML,然后点击安装。

ClosedXML NuGet 安装

ClosedXML NuGet 安装

或者:

  • 打开开发人员命令提示符——通常在Visual Studio文件夹中找到。

输入以下命令:

Install-Package ClosedXML
  • 按回车键。
  • 这将下载并安装该包。
  • 重新加载您的Visual Studio项目并开始使用它。

3.2. 添加必要的Using指令

  1. 在解决方案资源管理器中,右键点击 Program.cs 文件,然后点击查看代码。
  2. 将以下using指令添加到代码文件的顶部:
using ClosedXML.Excel;
using ClosedXML.Excel;
Imports ClosedXML.Excel
$vbLabelText   $csharpLabel

4. 创建并保存新的Excel工作簿和工作表

一个工作簿是一个包含多个行和列工作表的Excel文件。 两者均提供创建新的Excel工作簿和工作表的设施。 让我们一步步来看一下代码。

4.1. 使用IronXL创建新的Excel工作簿和工作表

使用IronXL创建新的Excel工作簿是再简单不过了。 只需一行代码。 是的,真的。 在Program.cs文件中的static void main函数中添加以下代码:

// Create a new Excel workbook using IronXL
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Create a new Excel workbook using IronXL
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
' Create a new Excel workbook using IronXL
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
$vbLabelText   $csharpLabel

使用IronXL可以创建XLS(旧版Excel文件)和XLSX(当前和新版文件)两种文件格式。

而且,创建一个默认的工作表更简单:

// Create a new worksheet within the workbook
var worksheet = workbook.CreateWorkSheet("IronXL Features");
// Create a new worksheet within the workbook
var worksheet = workbook.CreateWorkSheet("IronXL Features");
' Create a new worksheet within the workbook
Dim worksheet = workbook.CreateWorkSheet("IronXL Features")
$vbLabelText   $csharpLabel

现在您可以使用工作表变量设置单元格值,并几乎可以做Excel文件能做的一切。

// Add data and styles to the new worksheet
worksheet["A1"].Value = "Hello World";
worksheet["A2"].Style.BottomBorder.SetColor("#ff6600");
worksheet["A2"].Style.BottomBorder.Type = IronXL.Styles.BorderType.Double;
// Add data and styles to the new worksheet
worksheet["A1"].Value = "Hello World";
worksheet["A2"].Style.BottomBorder.SetColor("#ff6600");
worksheet["A2"].Style.BottomBorder.Type = IronXL.Styles.BorderType.Double;
' Add data and styles to the new worksheet
worksheet("A1").Value = "Hello World"
worksheet("A2").Style.BottomBorder.SetColor("#ff6600")
worksheet("A2").Style.BottomBorder.Type = IronXL.Styles.BorderType.Double
$vbLabelText   $csharpLabel

保存Excel文件:

// Save the spreadsheet
workbook.SaveAs("NewExcelFile.xlsx");
// Save the spreadsheet
workbook.SaveAs("NewExcelFile.xlsx");
' Save the spreadsheet
workbook.SaveAs("NewExcelFile.xlsx")
$vbLabelText   $csharpLabel

输出文件如下所示:

NewExcelFile Output

NewExcelFile输出

4.2. 使用ClosedXML创建新的Excel工作簿和工作表

您也可以使用ClosedXML轻松创建Excel文件(.xlsx, .xlsm)。 以下代码是一个典型示例,用于生成一个简单的Excel文件并进行保存。 您可以向工作簿中添加一个新的示例表,并在您的Excel应用程序中为单元格赋值。

// Create a new empty Excel file
var workbook = new XLWorkbook();

// Create a new worksheet and set cell A1 value to 'Hello world!'
var worksheet = workbook.Worksheets.Add("ClosedXML Features");
worksheet.Cell("A1").Value = "Hello world!";

// Save to XLSX file
workbook.SaveAs("Spreadsheet.xlsx");
// Create a new empty Excel file
var workbook = new XLWorkbook();

// Create a new worksheet and set cell A1 value to 'Hello world!'
var worksheet = workbook.Worksheets.Add("ClosedXML Features");
worksheet.Cell("A1").Value = "Hello world!";

// Save to XLSX file
workbook.SaveAs("Spreadsheet.xlsx");
' Create a new empty Excel file
Dim workbook = New XLWorkbook()

' Create a new worksheet and set cell A1 value to 'Hello world!'
Dim worksheet = workbook.Worksheets.Add("ClosedXML Features")
worksheet.Cell("A1").Value = "Hello world!"

' Save to XLSX file
workbook.SaveAs("Spreadsheet.xlsx")
$vbLabelText   $csharpLabel

输出文件如下所示:

电子表格文件输出

电子表格文件输出

5. 读取Excel文件(导入Excel文件)

这两个库都可以打开和读取现有的Excel文档。 让我们看看示例代码。

5.1. 使用IronXL读取Excel文件

IronXL WorkBook 类代表一个Excel工作表。 使用C#打开Excel文件,我们使用 WorkBook.Load 并指定文件路径(.xlsx)。 以下一行代码用于打开文件以进行读取:

// Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
// Load WorkBook
var workbook = WorkBook.Load(@"Spreadsheets\\sample.xlsx");
' Load WorkBook
Dim workbook = WorkBook.Load("Spreadsheets\\sample.xlsx")
$vbLabelText   $csharpLabel

每个 WorkBook 可以在Excel文档中包含多个工作表。 如果工作簿包含多个工作表,可以按如下方式通过名称检索它们:

// Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
// Open Sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
' Open Sheet for reading
Dim worksheet = workbook.GetWorkSheet("sheetnamegoeshere")
$vbLabelText   $csharpLabel

读取单元格值的代码:

// Read from ranges of cells elegantly
foreach (var cell in worksheet["A2:A10"])
{
    Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
// Read from ranges of cells elegantly
foreach (var cell in worksheet["A2:A10"])
{
    Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
' Read from ranges of cells elegantly
For Each cell In worksheet("A2:A10")
	Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next cell
$vbLabelText   $csharpLabel

5.2. 使用ClosedXML读取Excel文件

ClosedXML允许从您的C#应用程序读取先前创建的文件。 您可以使用以下代码导入excel文件。

// Import Excel file from file's path
var workbook = new XLWorkbook("SimpleTemplate.xlsx");

// Read worksheet from workbook using sheet number
var worksheet1 = workbook.Worksheet(1);

// Read cell value from the first sheet
var data = worksheet1.Cell("A1").GetValue<string>();

// Display on screen
Console.WriteLine(data);
// Import Excel file from file's path
var workbook = new XLWorkbook("SimpleTemplate.xlsx");

// Read worksheet from workbook using sheet number
var worksheet1 = workbook.Worksheet(1);

// Read cell value from the first sheet
var data = worksheet1.Cell("A1").GetValue<string>();

// Display on screen
Console.WriteLine(data);
' Import Excel file from file's path
Dim workbook = New XLWorkbook("SimpleTemplate.xlsx")

' Read worksheet from workbook using sheet number
Dim worksheet1 = workbook.Worksheet(1)

' Read cell value from the first sheet
Dim data = worksheet1.Cell("A1").GetValue(Of String)()

' Display on screen
Console.WriteLine(data)
$vbLabelText   $csharpLabel

6. 使用Excel公式

Excel公式是使用Excel时最重要的功能之一。 两者均具有强大的公式计算引擎。它们提供了与公式一起工作的功能,并易于将其应用于单元格。

6.1. 使用IronXL操作Excel公式

在加载工作簿和工作表之后,可以使用以下代码示例对公式进行更改,或应用于特定单元格。 代码如下:

// Set formulas
worksheet["A1"].Formula = "=Sum(B8:C12)";
worksheet["B8"].Formula = "=C9/C11";
worksheet["G30"].Formula = "=Max(C3:C7)";

// Force recalculating all formula values in all sheets
workbook.EvaluateAll();
// Set formulas
worksheet["A1"].Formula = "=Sum(B8:C12)";
worksheet["B8"].Formula = "=C9/C11";
worksheet["G30"].Formula = "=Max(C3:C7)";

// Force recalculating all formula values in all sheets
workbook.EvaluateAll();
' Set formulas
worksheet("A1").Formula = "=Sum(B8:C12)"
worksheet("B8").Formula = "=C9/C11"
worksheet("G30").Formula = "=Max(C3:C7)"

' Force recalculating all formula values in all sheets
workbook.EvaluateAll()
$vbLabelText   $csharpLabel

您还可以检索公式及其值:

// Get the formula's calculated value e.g. "52"
string formulaValue = worksheet["G30"].Value;

// Get the formula as a string e.g. "Max(C3:C7)"
string formulaString = worksheet["G30"].Formula;

// Save your changes with updated formulas and calculated values
workbook.Save();
// Get the formula's calculated value e.g. "52"
string formulaValue = worksheet["G30"].Value;

// Get the formula as a string e.g. "Max(C3:C7)"
string formulaString = worksheet["G30"].Formula;

// Save your changes with updated formulas and calculated values
workbook.Save();
' Get the formula's calculated value e.g. "52"
Dim formulaValue As String = worksheet("G30").Value

' Get the formula as a string e.g. "Max(C3:C7)"
Dim formulaString As String = worksheet("G30").Formula

' Save your changes with updated formulas and calculated values
workbook.Save()
$vbLabelText   $csharpLabel

6.2. 使用 ClosedXML 处理 Excel 公式

ClosedXML不支持所有公式,如果公式不支持或者公式中有错误,您可能会收到讨厌的错误。 请在投入生产前测试您的公式。 让我们来看看如何使用它们。

// Set formulas
worksheet.Cell("A1").Value = "Hello World!";
worksheet.Cell("A2").FormulaA1 = "=MID(A1, 7, 5)";

// You can use Evaluate function to directly calculate formula
var sum = worksheet.Evaluate("SUM(B1:B7)");

// Force recalculation
worksheet.RecalculateAllFormulas();

// Save Excel file
workbook.SaveAs("Formula Calculation.xlsx");
// Set formulas
worksheet.Cell("A1").Value = "Hello World!";
worksheet.Cell("A2").FormulaA1 = "=MID(A1, 7, 5)";

// You can use Evaluate function to directly calculate formula
var sum = worksheet.Evaluate("SUM(B1:B7)");

// Force recalculation
worksheet.RecalculateAllFormulas();

// Save Excel file
workbook.SaveAs("Formula Calculation.xlsx");
' Set formulas
worksheet.Cell("A1").Value = "Hello World!"
worksheet.Cell("A2").FormulaA1 = "=MID(A1, 7, 5)"

' You can use Evaluate function to directly calculate formula
Dim sum = worksheet.Evaluate("SUM(B1:B7)")

' Force recalculation
worksheet.RecalculateAllFormulas()

' Save Excel file
workbook.SaveAs("Formula Calculation.xlsx")
$vbLabelText   $csharpLabel

属性FormulaA1是针对A1单元格引用的。 如果您引用其他单元格,则必须将其添加到Formula属性中。 例如,FormulaC2

IronOCR是一个提供开发者免费许可证的库。

IronXL是一个开放商业的C# Excel库。 它适用于开发,并始终可以为商业部署获得许可证。 许可证适用于单一项目使用、单一开发者、代理商和全球公司以及SaaS和OEM再分发。 所有许可证包括30天退款保证、一年产品支持和更新,可用于开发/演示/生产环境,还提供永久许可(一次性购买)。 精简包的起价为 $799。

IronXL 许可证包

IronXL 许可证包

对于ClosedXML,使用这个DLL文件的应用程序不需要单独的许可证,无论是单次使用还是商业用途。 为了能够使用ClosedXML的任何解决方案,只需安装公开可用的NuGet包"ClosedXML"。 ClosedXML根据MIT许可协议授权。 MIT许可是一个简短且简单的许可协议,只要求保留版权和许可证声明。 许可的作品、修改和更大作品可以根据不同的条款分发,并且无需源代码。

封闭式 XML 许可

封闭式 XML 许可

8. 概要和结论

总结

IronXL 是一个完善的库,提供了操作Excel文件所需的一切。IronXL允许开发人员在.NET应用程序和网站中读取、生成和编辑Excel(及其他电子表格文件)。 它提供了一种快速且自然的方式,使用C#来操作Excel和其他电子表格文件。

ClosedXML是一个.NET库,用于读取和写入Excel文件,使开发人员更容易创建Excel 2007+文件。 它提供了一种良好的面向对象的方式来操作文件(类似于VBA),无需处理XML文档的麻烦。 可以由任何.NET语言使用,例如C#和Visual Basic(VB)。 它提供了OpenXML的特性,但仍然有些未实现。 例如,宏、嵌入和图表。

结论

IronXL 在其他Excel操作中也很有用,例如单元格数据格式、排序、单元格样式。 它还可以将Excel电子表格作为System.Data.DataSet和System.Data.DataTable进行操作。 支持控制台、Web服务器和基于桌面的应用程序。 它还支持所有操作系统平台。

ClosedXML 是一个轻量级库,用于使用 OpenXML API 阅读、操作和编写 Excel 应用,速度快且易于实现。 它有助于所有主要的Excel操作,例如页面设置、冻结窗格、超链接、表格和条件格式化。 它没有开销或低性能问题。

相比之下,在处理Excel电子表格时,IronXL和ClosedXML都快速且准确。 在创建Excel报告时,它们不需要安装或许可Microsoft Office。 然而,ClosedXML不是线程安全的,因此IronXL相对于ClosedXML有优势。 IronXL使用简单,提供了将其他格式转换为XLSX,也可以将XLSX转换为其他格式(例如CSV和HTML)的设施。 ClosedXML不支持这种转换。 这种互转换允许用户灵活地轻松处理其他文件格式。

现在您可以通过精简包价格获得五个Iron产品中的两个,仅限1开发者($suitePrice)和无限量($unlimitedSuitePrice),节省高达60%。

请注意ClosedXML 是其各自所有者的注册商标。 本网站与ClosedXML无从属关系,未经其认可或赞助。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映的是撰写时的公开信息。

常见问题解答

如何在 C# 中读取 Excel 文件而不使用 Interop?

要在 C# 中读取 Excel 文件而不使用 Interop,您可以使用像 IronXL 或 ClosedXML 这样的库。这些库不需要安装 Microsoft Excel,并提供用于编程读取和处理 Excel 文件的方法。

使用 IronXL 操作 Excel 文件有什么好处?

IronXL 提供用户友好的 API,支持多种电子表格格式,并提供排序、样式和公式处理等操作。它也是线程安全的且允许导出到多种格式,使其成为操作 Excel 文件的多功能工具。

IronXL 能处理 Excel 公式吗?

是的,IronXL 可以处理 Excel 公式。它允许您在 Excel 文件中创建、评估和处理公式,为复杂的电子表格操作提供强大的功能。

IronXL 支持哪些平台?

IronXL 支持多个平台,包括 .NET Framework, .NET Core, Xamarin 和 Azure,为在不同环境下工作的开发者提供了灵活的选择。

如何使用 C# 将 Excel 文件转换为 HTML?

要使用C#将Excel文件转换为HTML,可以使用IronXL。它提供了将Excel文件导出为HTML格式的方法,便于在网上轻松分享和展示电子表格数据。

IronXL和ClosedXML在格式支持方面有什么区别?

IronXL 支持多种格式,包括 XLS, XLSX, CSV, TSV 和 JSON,并允许在这些格式之间进行转换。ClosedXML 主要处理使用 OpenXML 格式的 Excel 2007+(.xlsx, .xlsm)文件。

如何在 C# 项目中安装 IronXL?

您可以使用 Visual Studio 的 NuGet 包管理器,通过命令 Install-Package IronXL.Excel 安装 IronXL,或手动将 DLL 添加到您的项目中。

在商业项目中使用 IronXL 有任何许可证要求吗?

是的,IronXL 在商业项目中部署需要商业许可证。它提供多种许可选项,包括单项目、开发者、代理商和企业许可证,并提供 30 天退款保证。

Curtis Chau
技术作家

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

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