与其他组件比较

IronXL与CsvHelper的比较

发布 2022年五月9日
分享:

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

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

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

The IronXL Library

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

IronXL 是一个直观的 C# 应用程序接口,可让你在 .NET 中读取、编辑和创建 Excel 电子表格文件,性能快如闪电。IronXL 完全支持 .NET Core、.NET Framework、Xamarin、Mobile、Linux、macOS 和 Azure。

IronXL 是一款领先的 .NET core 和 .NET framework Excel 电子表格库,适用于 C#。

IronXL 功能集

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

CsvHelper

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

<div 类="hsg-featured-snippet">

如何在 C# 中使用 CsvHelper

<ol>  
    <li><a 类="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronXL.Excel/">安装 CsvHelper C# 库读取 CSV 文件</a></li>
    <li>利用 <code>CsvConfiguration</code> 类为 CSV 设置配置</li>
    <li>使用 C# 内置的 <code>流阅读器</code></li>
    <li>将步骤 2 和 3 中的实例输入到 <code>CsvReader</code> 类读</li>
    <li>通过继承 CsvHelper 转换 CSV 格式的数据 <code>默认类型转换器</code> 类</li>
</ol>  

CsvHelper 功能

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

1.创建控制台应用程序

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

  • 启动 Visual Studio 2022 集成开发环境。
  • 点击 "创建新项目"。
  • 在 "创建新项目"页面,在语言下拉列表中选择C#,在平台列表中选择Windows,在 "项目类型"列表中选择控制台
  • 选择*控制台应用程序 (.NET框架)从显示的项目模板中选择*。

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

  • 点击下一步
  • 在 "附加信息 "屏幕中,指定要使用的框架版本。在本例中,我们将使用 .NET Framework 4.8**。

创建项目 - .NET Framework

  • 点击创建,完成程序。

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

2.安装 IronXL C# 库

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

1.使用 Visual Studio 和 NuGet 软件包

2.直接下载 NuGet 软件包

3.使用 DLL 手动安装

让我们来仔细看看每一个。

2.1.使用 Visual Studio 和 NuGet 软件包

Visual Studio 提供了 NuGet 包管理器,用于在项目中安装 NuGet 包。你可以通过 "项目菜单 "或右键单击 "解决方案资源管理器 "中的项目来访问它。

选择-管理-NuGet-软件包

  • 现在,从浏览选项卡 -> 搜索 IronXL.Excel -> 安装

搜索 IronXL

  • 我们就大功告成了。

2.2.直接下载 NuGet 软件包

可直接访问 NuGet 网站并下载软件包。具体步骤如下

2.3.使用 DLL 手动安装

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

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

2.4.添加必要的 Using 指令

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

2.在代码文件顶部添加以下 using 指令:

using IronXL;
using IronXL;
Imports IronXL
VB   C#

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

3.CsvHelper 安装

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

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

  • 打开开发人员命令提示符--通常可在 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 提供了一个相当不错的简便选项,无需 Microsoft Excel 即可完成计算。让我们先将 CSV 文件转换为普通 Excel 文件。

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

这个过程非常简单方便。通常只需一行代码即可完成。

CSV 转 Excel 格式:

WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
 
workbook.SaveAs("CsvToExcelConversion.xlsx");
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
 
workbook.SaveAs("CsvToExcelConversion.xlsx");
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
Dim ws As WorkSheet = workbook.DefaultWorkSheet
'
workbook.SaveAs("CsvToExcelConversion.xlsx")
VB   C#

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")
VB   C#

每个工作簿可以包含多个工作表对象。这些对象代表 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")
VB   C#

读取单元格值的代码:

// 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
VB   C#

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

// Set Formulas
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
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
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()
VB   C#

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

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

WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
//Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
//Saved as : SaveAsCSV.Sheet1.csv
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
//Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
//Saved as : SaveAsCSV.Sheet1.csv
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")
'Import .xls, .csv, or .tsv file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
'Saved as : SaveAsCSV.Sheet1.csv
VB   C#

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
FirstName,LastName,Age,IsActive
Ali,Talal,30,Yes
Affan,Ahmad,31,No
Saad,Bhatti,31,Yes
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'FirstName,LastName,Age,IsActive Ali,Talal,30,Yes Affan,Ahmad,31,No Saad,Bhatti,31,Yes
VB   C#

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

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int? Age { get; set; }
    public string IsActive { get; set; }
}
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int? Age { get; set; }
    public string IsActive { get; set; }
}
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
VB   C#

读取 CSV 文件的代码如下。

var fileName = @"<path to our CSV file>";
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Encoding = Encoding.UTF8,
    Delimiter = ","
};

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>();

        foreach (var person in data)
        {
            // Do something with values in each row
        }
    }
}
var fileName = @"<path to our CSV file>";
var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Encoding = Encoding.UTF8,
    Delimiter = ","
};

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>();

        foreach (var person in data)
        {
            // Do something with values in each row
        }
    }
}
Dim fileName = "<path to our CSV file>"
Dim configuration = New CsvConfiguration(CultureInfo.InvariantCulture) With {
	.Encoding = Encoding.UTF8,
	.Delimiter = ","
}

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)()

		For Each person In data
			' Do something with values in each row
		Next person
	End Using
	End Using
End Using
VB   C#

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

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

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

public class CustomBooleanConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
    }
}
public class CustomBooleanConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        return text.Equals("Yes", StringComparison.OrdinalIgnoreCase);
    }
}
Public Class CustomBooleanConverter
	Inherits DefaultTypeConverter

	Public Overrides Function ConvertFromString(ByVal text As String, ByVal row As IReaderRow, ByVal memberMapData As MemberMapData) As Object
		Return text.Equals("Yes", StringComparison.OrdinalIgnoreCase)
	End Function
End Class
VB   C#

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

6.许可证发放

IronXL 是一款开放式商业软件 C# Excel 库.它可免费用于开发,也可随时授权用于商业部署。提供许可证适用于单个项目使用、单个开发人员、机构和跨国公司,以及 SaaS 和 OEM 再分发。所有许可证都包括 30 天退款保证、一年的产品支持和更新、开发/分期/生产的有效性以及永久许可证。 (一次性购买).Lite 软件包从 $749 开始。

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

7.总结和结论

摘要

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

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

结论

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

< 前一页
IronXL与CsvWriter的比较
下一步 >
IronXL与NPOI的比较

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 1,004,037 查看许可证 >