与其他组件比较

IronXL与CsvHelper的比较

发布 2022年五月9日
分享:

处理 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 for .NET 是一个直观的 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 文档安装包中找到。

CsvHelper 功能

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

1.创建控制台应用程序

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

  • 启动 Visual Studio 2022 IDE。
  • 点击 "创建新项目"。
  • 在 "创建新项目"页面,在语言下拉列表中选择C#,在平台列表中选择Windows,在 "项目类型"列表中选择控制台
  • 选择 *控制台应用程序(.NET框架)从显示的项目模板中选择*。
    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 软件包

  2. 直接下载 NuGet 软件包

  3. 使用 DLL 手动安装

    让我们逐一进行详细了解。

2.1.使用 Visual Studio 和 NuGet 软件包

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

Csvhelper Alternatives 3 related to 2.1.使用 Visual Studio 和 NuGet 软件包

选择-管理-NuGet-软件包

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

    Csvhelper Alternatives 4 related to 2.1.使用 Visual Studio 和 NuGet 软件包

    搜索 IronXL

  • 我们就大功告成了。

2.2.直接下载 NuGet 软件包

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

2.3.使用 DLL 手动安装

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

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

2.4.添加必要的使用指令

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

  2. 在代码文件顶部添加以下 using 指令:
using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

全部完成! 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.Excel 提供了一个相当不错且简单的选择,无需 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")
$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 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

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

// 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()
$vbLabelText   $csharpLabel

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
$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
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
$vbLabelText   $csharpLabel

我们将把每一行映射到一个 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
$vbLabelText   $csharpLabel

读取 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
$vbLabelText   $csharpLabel

数据类型为 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
$vbLabelText   $csharpLabel

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

6.授权许可

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

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

7.总结和结论

摘要

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

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

结论

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

Kannaopat Udonpant

坎那帕·乌东攀

软件工程师

 LinkedIn

在成为软件工程师之前,Kannapat 从日本北海道大学完成了环境资源博士学位。在攻读学位期间,Kannapat 还成为了生物生产工程系车辆机器人实验室的成员。2022年,他利用自己的 C# 技能加入了 Iron Software 的工程团队,专注于 IronPDF。Kannapat 珍视他的工作,因为他能直接向编写 IronPDF 大部分代码的开发者学习。除了同伴学习,Kannapat 还享受在 Iron Software 工作的社交方面。不写代码或文档时,Kannapat 通常在 PS5 上玩游戏或重看《最后生还者》。
< 前一页
IronXL与CsvWriter的比较
下一步 >
IronXL与NPOI的比较