IronXL与CsvWriter的比较。
处理 CSV 文件是一项具有挑战性的任务。 不过,如今有许多库可以帮助开发人员完成这项任务,而且无需安装 Microsoft Excel。
在本文中,我们将讨论和比较如何在 C# .NET 技术中以编程方式处理 Microsoft Excel 文档,无论是 CSV 格式还是标准 Excel 格式,都可以使用两个最流行的库 IronXL 和 CSVWriter。
让我们先来看看这两个库都有哪些功能。
IronXL库
IronXL for .NET 是一个.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核心和.NET框架Excel电子表格库。
IronXL功能集
- 从 XLS/XLSX/CSV/TSV 加载、读取和编辑数据
- 保存和导出 - 至 XLS/XLSX/CSV/TSV/JSON
- 范围 - 易于使用的工作表 ["A1:B10"] 语法。 直观地组合和创建范围。
- 排序 - 对范围、列和行进行排序。
- 样式 - 单元格视觉样式、字体、大小、背景图案、边框、对齐方式和数字格式。
CSVWriter
用于编写 CSV 文件的 .NET 库。 极其快速、灵活、易于使用。 支持编写自定义类对象。
CsvWriter 功能
- 快速:即时编译类,性能极快
- 灵活:写作时保守,阅读时自由
简单易用:读取和写入就像
WriteRecords(records)一样简单 - 高度可配置
- Linux 模式
- 低内存使用率
1. 创建控制台应用程序
使用以下步骤创建控制台应用程序:
- 启动 Visual Studio 2022 IDE。
- 点击"创建新项目"。
- 在"创建新项目"页面中,在语言下拉列表中选择 C#,在"平台"列表中选择 Windows,在"项目类型"列表中选择 控制台。
- 从显示的项目模板中选择 Console App (.NET Framework) 。

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

创建项目 - .NET Framework
- 单击创建完成流程。
该项目现已创建,我们即将对库进行测试。 不过,我们仍需要将它们安装并集成到我们的项目中。 让我们先安装IronXL。
2. IronXL C# 库安装
您可以使用以下方法下载和安装IronXL库:
1.使用 Visual Studio 和 NuGet 软件包 2. 直接下载 NuGet 包 3.使用 DLL 手动安装
让我们仔细看一下每个方法。
2.1. 使用包含NuGet包的Visual Studio
Visual Studio 提供 NuGet 包管理器以便在您的项目中安装 NuGet 包。 您可以通过项目菜单或通过右键点击解决方案资源管理器中的项目访问它。

选择-管理-NuGet-包
- 现在,从浏览选项卡 -> 搜索 IronXL.Excel -> 安装

搜索 IronXL
- 我们完成了。
2.2. 直接下载 NuGet 包
可以通过直接访问 NuGet 站点并下载包来完成。 步骤如下
- Navigate to https://www.nuget.org/packages/IronXL.Excel
- 选择 "下载软件包
- 双击下载的软件包
- 软件包将安装
- 重新加载 Visual Studio 项目并开始使用
2.3. 使用DLL手动安装
另一种下载和安装 IronXL C# 库的方法是按照以下步骤通过开发者命令提示符安装 IronXLNuGet 包。
- 打开 Developer 命令提示符--通常可在 Visual Studio 文件夹中找到。
- 键入以下命令:
- 按回车键
- 这将下载并安装软件包
- 重新加载 Visual Studio 项目并开始使用
2.4. 添加必要的Using指令
1.在解决方案资源管理器中,右键单击 Program.cs 文件,然后单击查看代码。 2. 将以下using指令添加到代码文件的顶部:
using IronXL;Imports IronXLImports IronXL全部完成了! IronXL已下载、安装并准备使用。 不过,在此之前,我们应该先安装 CsvHelper。
3.CSVWriter 安装
3.1.使用 NuGet 包管理器控制台
要使用 CSVWriter,您需要下载并安装 CsvHelper C# 库。 为此,请使用以下步骤通过开发者命令提示符安装 NuGet 包。
- 打开 Developer 命令提示符--通常可在 Visual Studio 文件夹中找到。
- 键入以下命令:
- 按回车键
- 这将下载并安装软件包
- 重新加载 Visual Studio 项目并开始使用
- 查看 CsvHelper.CsvWriter 方法的实现细节
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 specify the format and delimiter
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
// Get the default worksheet
WorkSheet ws = workbook.DefaultWorkSheet;
// Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx");// Load the CSV file and specify the format and delimiter
WorkBook workbook = WorkBook.LoadCSV("test.csv", fileFormat: ExcelFileFormat.XLSX, ListDelimiter: ",");
// Get the default worksheet
WorkSheet ws = workbook.DefaultWorkSheet;
// Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx");' Load the CSV file and specify the format and delimiter
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
' Get the default worksheet
Dim ws As WorkSheet = workbook.DefaultWorkSheet
' Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx")' Load the CSV file and specify the format and delimiter
Dim workbook As WorkBook = WorkBook.LoadCSV("test.csv", fileFormat:= ExcelFileFormat.XLSX, ListDelimiter:= ",")
' Get the default worksheet
Dim ws As WorkSheet = workbook.DefaultWorkSheet
' Save the workbook as an Excel file
workbook.SaveAs("CsvToExcelConversion.xlsx")4.2.使用 IronXL 读取和操作转换后的 CSV 文件
IronXL WorkBook类表示一个Excel sheet。 要使用 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")' Load WorkBook
Dim workbook = WorkBook.Load("Spreadsheets\\sample.xlsx")每个 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")' Open Sheet for reading
Dim worksheet = workbook.GetWorkSheet("sheetnamegoeshere")读取单元格值的代码:
// 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' 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加载并读取工作簿和工作表后,可使用以下代码示例对公式进行更改或将公式应用到特定单元格。 代码如下
// 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()' 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()4.3.将 Excel 文档保存为 CSV 文件
使用 IronXL 编写 CSV 文件非常简单。 以下代码只需使用 SaveAsCsv 方法将 Excel 文件保存为 CSV 格式即可。
// Load the workbook
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
// Save as .csv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
// Saved as : SaveAsCSV.Sheet1.csv// Load the workbook
WorkBook wb = WorkBook.Load("Normal_Excel_File.xlsx");
// Save as .csv file
wb.SaveAsCsv("SaveAsCSV.csv", ",");
// Saved as : SaveAsCSV.Sheet1.csv' Load the workbook
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")
' Save as .csv file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
' Saved as : SaveAsCSV.Sheet1.csv' Load the workbook
Dim wb As WorkBook = WorkBook.Load("Normal_Excel_File.xlsx")
' Save as .csv file
wb.SaveAsCsv("SaveAsCSV.csv", ",")
' Saved as : SaveAsCSV.Sheet1.csv5.使用 CSVWriter 处理 CSV 数据
将数据写入 CSV 文件是一项常见操作。 CSVHelper 方法 CSVWriter 带有提供的分隔符,可在为 C# 发布的非常简单的 CSV writer 中处理所有字符和新行字符。 下面我们将了解如何使用 CSVWriter 写入数据。
5.1.创建一个简单的控制台应用程序
使用 Visual Studio 创建一个简单的 CSVWriter,并提供分隔符控制台应用程序。 项目创建后,下一步就是创建一个 Person 类:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsLiving { get; set; }
}public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsLiving { get; set; }
}Public Class Person
Public Property Id() As Integer
Public Property Name() As String
Public Property IsLiving() As Boolean
End ClassPublic Class Person
Public Property Id() As Integer
Public Property Name() As String
Public Property IsLiving() As Boolean
End Class现在,让我们在 Main 方法中创建一个 Person 对象列表,并将其写入 CSV 文件:
var myPersonObjects = new List<Person>()
{
new Person { Id = 1, IsLiving = true, Name = "John" },
new Person { Id = 2, IsLiving = true, Name = "Steve" },
new Person { Id = 3, IsLiving = true, Name = "James" }
};var myPersonObjects = new List<Person>()
{
new Person { Id = 1, IsLiving = true, Name = "John" },
new Person { Id = 2, IsLiving = true, Name = "Steve" },
new Person { Id = 3, IsLiving = true, Name = "James" }
};Dim myPersonObjects = New List(Of Person)() From {
New Person With {
.Id = 1,
.IsLiving = True,
.Name = "John"
},
New Person With {
.Id = 2,
.IsLiving = True,
.Name = "Steve"
},
New Person With {
.Id = 3,
.IsLiving = True,
.Name = "James"
}
}Dim myPersonObjects = New List(Of Person)() From {
New Person With {
.Id = 1,
.IsLiving = True,
.Name = "John"
},
New Person With {
.Id = 2,
.IsLiving = True,
.Name = "Steve"
},
New Person With {
.Id = 3,
.IsLiving = True,
.Name = "James"
}
}5.2. 在 C# 中以默认设置写入 CSV 文件
CsvHelper 已成为使用 CSVWriter 方法在 C# 中编写 CSV 的标准方法,而且非常易于使用:
using (var writer = new StreamWriter("filePersons.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(myPersonObjects);
}using (var writer = new StreamWriter("filePersons.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(myPersonObjects);
}Using writer = New StreamWriter("filePersons.csv")
Using csv = New CsvWriter(writer, CultureInfo.InvariantCulture)
csv.WriteRecords(myPersonObjects)
End Using
End UsingUsing writer = New StreamWriter("filePersons.csv")
Using csv = New CsvWriter(writer, CultureInfo.InvariantCulture)
csv.WriteRecords(myPersonObjects)
End Using
End Using5.3.追加数据
我们需要注意的是,每次运行我们的程序时,旧的 CSV 文件都会被覆盖。 有时我们希望在文件末尾添加数据,而不是覆盖现有数据。 CSVWriter 不提供这样做的方法,因为打开/写入文件不是 CSVWriter 使用提供的分隔符的责任。 我们可以通过使用 FileStream,然后使用 FileStream 构建我们的 StreamWriter 来实现这一目标。 虽然这不属于本文的讨论范围,但我会向您展示如何进行操作,因为这是任何应用程序都不可或缺的一部分。
var configPersons = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = false
};
using (var stream = File.Open("filePersons.csv", FileMode.Append))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer, configPersons))
{
csv.WriteRecords(myPersonObjects);
}var configPersons = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = false
};
using (var stream = File.Open("filePersons.csv", FileMode.Append))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer, configPersons))
{
csv.WriteRecords(myPersonObjects);
}Dim configPersons = New CsvConfiguration(CultureInfo.InvariantCulture) With {.HasHeaderRecord = False}
Using stream = File.Open("filePersons.csv", FileMode.Append)
Using writer = New StreamWriter(stream)
Using csv = New CsvWriter(writer, configPersons)
csv.WriteRecords(myPersonObjects)
End Using
End Using
End UsingDim configPersons = New CsvConfiguration(CultureInfo.InvariantCulture) With {.HasHeaderRecord = False}
Using stream = File.Open("filePersons.csv", FileMode.Append)
Using writer = New StreamWriter(stream)
Using csv = New CsvWriter(writer, configPersons)
csv.WriteRecords(myPersonObjects)
End Using
End Using
End Using不过,对现有文件进行附加是一件棘手的事情,因为在附加时,排序可能会发生变化,或者我们可能添加了新的属性。 我们在附加时应确保考虑到这一点。
6.许可
IronXL 是一个公开的商业 C# Excel 库。 它适用于开发,并始终可以为商业部署获得许可证。 可以获得的许可证 用于单项目使用、单开发人员、代理商、全球公司、SaaS 和 OEM 再分发。 所有许可证包括30天退款保证、一年产品支持和更新,可用于开发/演示/生产环境,还提供永久许可(一次性购买)。 Lite套餐起始于$999。
提供分隔符的 CSVWriter 是一个逗号分隔元素,完全免费,适合商业使用。
7.总结和结论
总结
IronXL.Excel 是一个完整的库,可提供处理 Excel 文件所需的一切功能。它可以将各种格式转换为 XLSX,也可以将 XLSX 转换为 CSV 等其他格式。这种相互转换为用户提供了轻松处理其他文件格式的灵活性。
另一方面,CSVWriter 只适用于 CSV 文件格式,而且选项非常有限。 用户不能在不同的文件格式之间切换,而使用 IronXL 则可以。 所有代码示例均可在 CsvHelper 文档文件中找到。 本文档提供了如何在您的项目中使用 CSVWriter 的指南。
结论
与 CSVHelper.CSVWriter 相比,IronXL 具有明显的优势,因为它支持处理多种格式。 此外,您还可以根据自己的选择应用公式和样式,而 CsvHelper 只允许读写 CSV 文件,且选项有限。 此外,您不能在现有 CSV 文件中添加新记录,因为这只会覆盖以前的条目。
Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。
