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

IronXL 和 CsvHelper 的比较

处理 CSV 文件是一项具有挑战性的任务。 目前有许多库可以帮助开发人员完成这项任务,而无需安装 Microsoft Excel。

在本文中,我们将讨论和比较如何使用 IronXL 和 CsvHelper 这两个最流行的库,在 C# .NET 技术中以编程方式处理 CSV 格式或标准 XLSX 格式的 Microsoft Excel 文档。

让我们先来看看这两个库都有哪些功能。

IronXL库

IronXL for .NET 是一个.NET 库,便于使用 C# 阅读和编辑 Microsoft Excel 文档。 IronXL.Excel是一个独立的.NET软件库,用于读取各种电子表格格式。 它不需要安装 Microsoft Excel,也不依赖 Interop。它能非常流畅地处理 CSV 文件。

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

IronXL是C#中领先的.NET核心和.NET框架Excel电子表格库。

IronXL功能集

  • 从 XLS/XLSX/CSV/TSV 加载、读取和编辑数据
  • 保存和导出 - 至 XLS/XLSX/CSV/TSV/JSON
  • 范围 - 易于使用的 WorkSheet["A1:B10"] 语法。 直观地组合和创建范围。
  • 排序 - 对范围、列和行进行排序。
  • 样式 - 单元格视觉样式、字体、大小、背景图案、边框、对齐方式和数字格式。

CsvHelper

用于读写 CSV 文件的 .NET 库。 极其快速、灵活、易于使用。 支持读写自定义类对象。 所有示例代码均可在软件包 CsvHelper 文档中找到。

CsvHelper 的功能

  • 快速:即时编译类,性能极快
  • 灵活:写作时保守,阅读时自由
  • 易于使用:读取和写入操作与 GetRecords()WriteRecords(records) 一样简单
  • 高度可配置
  • Linux 模式
  • 低内存使用率

1. 创建控制台应用程序

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

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

创建项目 - 控制台应用程序

  • 单击 下一页
  • 附加信息屏幕中,指定您希望使用的框架版本。 在本例中,我们将使用.NET Framework 4.8
Csvhelper Alternatives 2 related to 1. 创建控制台应用程序

创建项目 - .NET Framework

  • 单击创建完成流程。

该项目现已创建,我们即将对库进行测试。 不过,我们仍需要将它们安装并集成到我们的项目中。 让我们先安装IronXL。

2. IronXL C#库安装

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

1.使用 Visual Studio 和 NuGet 软件包

  1. 直接下载 NuGet 包 3.使用 DLL 手动安装

让我们仔细看一下每个方法。

2.1. 使用包含NuGet包的Visual Studio

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

Csvhelper Alternatives 3 related to 2.1. 使用包含NuGet包的Visual Studio

选择-管理-NuGet-包

  • 现在,从浏览选项卡 -> 搜索 IronXL.Excel -> 安装
Csvhelper Alternatives 4 related to 2.1. 使用包含NuGet包的Visual Studio

搜索 IronXL

  • 我们完成了。

2.2. 直接下载 NuGet 包

可以通过直接访问 NuGet 站点并下载包来完成。 步骤如下

2.3. 使用DLL手动安装

下载和安装IronXL C#库的另一种方式是使用以下步骤,通过开发人员命令提示符安装IronXL NuGet包

  • 打开 Developer 命令提示符--通常可在 Visual Studio 文件夹中找到。
  • 键入以下命令PM> Install-Package IronXL.Excel 安装软件包
  • 按回车键
  • 这将下载并安装软件包
  • 重新加载 Visual Studio 项目并开始使用

2.4. 添加必要的Using指令

1.在解决方案资源管理器中,右键单击 Program.cs 文件,然后单击查看代码。

  1. 将以下using指令添加到代码文件的顶部:
using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

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

3.CsvHelper 安装

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

要下载和安装 CsvHelper C# 库,请使用以下步骤通过开发人员命令提示符安装 NuGet 软件包

  • 打开 Developer 命令提示符--通常可在 Visual Studio 文件夹中找到。
  • 键入以下命令PM> Install-Package CsvHelper -Version 27.2.1</代码
  • 按回车键
  • 这将下载并安装软件包
  • 重新加载 Visual Studio 项目并开始使用

3.2.直接下载

从 NuGet 网站下载:https://www.nuget.org/packages/CsvHelper

4.使用 IronXL 处理 CSV 文件

逗号分隔值 (CSV) 文件是一种使用逗号分隔值的分隔文本文件。 文件的每一行都是一条数据记录。 要操作这些文件进行计算是一项具有挑战性的任务,IronXL.Excel 提供了一个相当不错且简单的选择,无需 Microsoft Excel 即可完成。 让我们先将 CSV 文件转换为普通 Excel 文件。

4.1.将 CSV 文件转换为 Excel 格式

过程非常简单容易。 通常只需一行代码即可完成。

CSV到Excel格式:

// Load the CSV file and convert it to an Excel format
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
// Access the default worksheet
WorkSheet ws = workbook.DefaultWorkSheet;

// Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx");
// Load the CSV file and convert it to an Excel format
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
// Access the default worksheet
WorkSheet ws = workbook.DefaultWorkSheet;

// Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx");
' Load the CSV file and convert it to an Excel format
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
' Access the default worksheet
Dim ws As WorkSheet = workbook.DefaultWorkSheet

' Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx")
$vbLabelText   $csharpLabel

4.2.使用 IronXL 读取和操作转换后的 CSV 文件

IronXL WorkBook 类代表一个Excel工作表。 要使用 C# 打开 Excel 文件,我们使用 WorkBook.Load 并指定 Excel 文件(.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 可以包含多个 WorkSheet 对象。 这些表示Excel文件中的工作表。 如果工作簿包含工作表,通过名称检索它们如下所示:

// Open the sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
// Open the sheet for reading
var worksheet = workbook.GetWorkSheet("sheetnamegoeshere");
' Open the 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

加载并读取工作簿和工作表后,可使用以下代码示例对公式进行更改或将其应用到特定单元格。 代码如下

// Set formulas in specific cells
worksheet["A1"].Formula = "SUM(B8:C12)";
worksheet["B8"].Formula = "=C9/C11";
worksheet["G30"].Formula = "MAX(C3:C7)";

// Force recalculate all formula values in all sheets
workbook.EvaluateAll();
// Set formulas in specific cells
worksheet["A1"].Formula = "SUM(B8:C12)";
worksheet["B8"].Formula = "=C9/C11";
worksheet["G30"].Formula = "MAX(C3:C7)";

// Force recalculate all formula values in all sheets
workbook.EvaluateAll();
' Set formulas in specific cells
worksheet("A1").Formula = "SUM(B8:C12)"
worksheet("B8").Formula = "=C9/C11"
worksheet("G30").Formula = "MAX(C3:C7)"

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

4.3.将 Excel 文档保存为 CSV 文件

使用 IronXL 编写 CSV 文件非常简单。 以下代码只需使用 SaveAsCsv 方法将 Excel 文件保存为 CSV 格式即可。

// Load the Excel Workbook
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");

// Save the workbook as a CSV file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
// This will save as "SaveAsCSV.Sheet1.csv"
// Load the Excel Workbook
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");

// Save the workbook as a CSV file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
// This will save as "SaveAsCSV.Sheet1.csv"
' Load the Excel Workbook
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")

' Save the workbook as a CSV file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
' This will save as "SaveAsCSV.Sheet1.csv"
$vbLabelText   $csharpLabel

5.使用 CsvHelper 处理 CSV 文件

阅读 CSV 文件是一项看似简单实则困难重重的工作。 CsvHelper 库可以轻松编写类型安全、快速和灵活的代码。

5.1.使用 CsvHelper 读取 CSV 文件

这是 CSV 文件示例,其中有三列文本和一列数字。

FirstName,LastName,Age,IsActive
Ali,Talal,30,Yes
Affan,Ahmad,31,No
Saad,Bhatti,31,Yes

我们将把每一行映射为 Person 类型的对象。

// Define the Person class to map CSV records
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int? Age { get; set; }
    public string IsActive { get; set; }
}
// Define the Person class to map CSV records
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int? Age { get; set; }
    public string IsActive { get; set; }
}
' Define the Person class to map CSV records
Public Class Person
	Public Property FirstName() As String
	Public Property LastName() As String
	Public Property Age() As Integer?
	Public Property IsActive() As String
End Class
$vbLabelText   $csharpLabel

读取 CSV 文件的代码如下。

// Define the path to the CSV file
var fileName = @"<path to our CSV file>";

// Configure CsvHelper
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Encoding = Encoding.UTF8,
    Delimiter = ","
};

// Read CSV file
using (var fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
    using (var textReader = new StreamReader(fs, Encoding.UTF8))
    using (var csv = new CsvReader(textReader, configuration))
    {
        var data = csv.GetRecords<Person>();

        // Iterate over each person record
        foreach (var person in data)
        {
            // Process each Person object
        }
    }
}
// Define the path to the CSV file
var fileName = @"<path to our CSV file>";

// Configure CsvHelper
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Encoding = Encoding.UTF8,
    Delimiter = ","
};

// Read CSV file
using (var fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
    using (var textReader = new StreamReader(fs, Encoding.UTF8))
    using (var csv = new CsvReader(textReader, configuration))
    {
        var data = csv.GetRecords<Person>();

        // Iterate over each person record
        foreach (var person in data)
        {
            // Process each Person object
        }
    }
}
' Define the path to the CSV file
Dim fileName = "<path to our CSV file>"

' Configure CsvHelper
Dim configuration = New CsvConfiguration(CultureInfo.InvariantCulture) With {
	.Encoding = Encoding.UTF8,
	.Delimiter = ","
}

' Read CSV file
Using fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)
	Using textReader = New StreamReader(fs, Encoding.UTF8)
	Using csv = New CsvReader(textReader, configuration)
		Dim data = csv.GetRecords(Of Person)()

		' Iterate over each person record
		For Each person In data
			' Process each Person object
		Next person
	End Using
	End Using
End Using
$vbLabelText   $csharpLabel

data 的类型是 IEnumerable<Person> 。 CsvHelper 会自动将每一列映射到同名属性。 例如,FirstName 列中的值将被映射为 Person.FirstName。 然后,我们可以遍历 data 并访问每一行中的值。

5.2.将 CSV 文件中的数据从一种类型转换为另一种类型。

CSV 文件大多包含文本数据。 例如,年龄列是一个整数值,而 CSV 文件只包含文本。 CsvHelper 可将字符串中的数据转换为标准 .NET 类型(布尔、Int32、Int64、枚举)。 在我们的案例中,我们有一个 IsActive bool 数据类型,它只能有 True/False 并且包含非标准值。 可通过创建自定义转换器进行转换。 代码样式如下:

// Custom Boolean Converter for CsvHelper
public class CustomBooleanConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        // Convert "Yes" to true and anything else to false
        return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
    }
}
// Custom Boolean Converter for CsvHelper
public class CustomBooleanConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        // Convert "Yes" to true and anything else to false
        return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
    }
}
' Custom Boolean Converter for CsvHelper
Public Class CustomBooleanConverter
	Inherits DefaultTypeConverter

	Public Overrides Function ConvertFromString(ByVal text As String, ByVal row As IReaderRow, ByVal memberMapData As MemberMapData) As Object
		' Convert "Yes" to true and anything else to false
		Return text.Equals("Yes", StringComparison.OrdinalIgnoreCase)
	End Function
End Class
$vbLabelText   $csharpLabel

尽管 bool 是标准的 .NET 类型,但默认转换器只能处理 True/False 值,而我们的 CSV 文件有 Yes/No 值。 在此,我们需要子类化 DefaultTypeConverter 然后重载 ConvertFromString 方法。

6.许可

IronXL is an openly commercial C# Excel library. 它适用于开发,并始终可以为商业部署获得许可证。 Licenses are available for single-project use, single developers, agencies, and global corporations, as well as SaaS and OEM redistribution. 所有许可证包括30天退款保证、一年产品支持和更新,可用于开发/演示/生产环境,还提供永久许可(一次性购买)。 Lite包从$799起售价。

CsvHelper - 读写 CSV 文件完全免费,可用于商业用途。

7.总结和结论

总结

IronXL.Excel 是一个完整的库,可提供处理 Excel 文件所需的一切功能。它易于使用,能将各种格式转换为 XLSX,以及将 XLSX 转换为 CSV 等其他格式。这种相互转换为用户提供了灵活性,可以轻松处理各种文件格式。

另一方面,CsvHelper 是专为处理 CSV 文件格式而设计的,这意味着它只能处理 CSV 文件。 所有代码示例均可在 CsvHelper 文档文件中找到。 文档为您提供了如何在项目中使用 CsvHelper 的指南。

结论

IronXL 与 CsvHelper 相比优势明显,因为它支持用户使用多种格式。 此外,您还可以根据自己的选择应用公式和样式,而 CsvHelper 只允许读写 CSV 文件,且选项有限。 此外,您不能在现有 CSV 文件中添加新记录,因为这只会覆盖以前的条目。

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

常见问题解答

如何使用 C# 将 Excel 文件转换为不同格式?

使用 IronXL,您可以将 Excel 文件转换为 XLS、XLSX、CSV 和 TSV 等多种格式。这可以通过使用 IronXL 加载文件,并使用它多功能的导出选项将其保存为所需格式来实现。

使用 IronXL 比 CsvHelper 进行 Excel 文件操作有什么好处?

IronXL 提供全面的多种 Excel 格式(包括 XLS、XLSX 和 CSV)处理功能。它支持数据操作、样式设置和公式应用等功能,非常适合需要广泛 Excel 文件处理的项目。而 CsvHelper 专为快速高效地操作 CSV 文件而设计。

如何为 C# 项目安装 IronXL?

您可以通过在 Visual Studio 中使用 NuGet 包管理器搜索 'IronXL' 来安装它。或者,您可以直接下载 NuGet 包,或通过在项目中引用 DLL 手动安装。

IronXL 是否可以在没有安装 Microsoft Excel 的情况下使用?

是的,IronXL 不需要在您的系统上安装 Microsoft Excel。它可以独立运行以读取、编辑和创建各种格式的 Excel 文件。

如何使用 CsvHelper 读取和写入 CSV 文件?

CsvHelper 允许您定义一个类以映射 CSV 记录,配置 CsvHelper 设置,并使用 CsvReaderCsvWriter 轻松处理 CSV 文件操作。

是什么使得 CsvHelper 成为处理 CSV 文件的热门选择?

CsvHelper 以其速度、灵活性和易用性而著称。它支持自定义类对象和类型转换,使得它成为专注于 CSV 数据处理的项目的首选。

使用 IronXL 是否有许可要求?

是的,在商业环境中部署 IronXL 需要付费许可。这与 CsvHelper 的免费商业使用形成对比。

哪些类型的项目将最受益于 IronXL?

需要广泛操作多种 Excel 文件格式(包括样式设置、数据排序和公式计算功能)的项目,将因 IronXL 的强大功能而受益匪浅。

Curtis Chau
技术作家

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

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