在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
处理 CSV 文件是一项具有挑战性的任务。 目前有许多库可以帮助开发人员完成这项任务,而无需安装 Microsoft Excel。
在本文中,我们将讨论和比较如何使用 IronXL 和 CsvHelper 这两个最流行的库,在 C# .NET 技术中以编程方式处理 CSV 格式或标准 XLSX 格式的 Microsoft Excel 文档。
让我们先看看这两个库都有哪些功能。
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#。
用于读写 CSV 文件的 .NET 库。 极其快速、灵活、易于使用。 支持读写自定义类对象。 所有示例代码均可在 CsvHelper 文档安装包中找到。
CsvConfiguration
类为 CSV 设置配置流阅读器
CsvReader
类读默认类型转换器
类使用以下步骤创建一个控制台应用程序:
创建项目 - 控制台应用程序
在 "附加信息 "页面中,指定您希望使用的框架版本。 我们将在本例中使用 .NET Framework 4.8**。
创建项目 - .NET Framework
单击创建完成流程。
该项目现已创建,我们即将对库进行测试。 不过,我们仍然需要安装并将它们集成到我们的项目中。 让我们先安装 IronXL。
您可以使用以下方法下载并安装 IronXL 库:
使用 Visual Studio 和 NuGet 软件包
直接下载 NuGet 软件包
使用 DLL 手动安装
让我们逐一进行详细了解。
Visual Studio 提供了 NuGet 包管理器,用于在项目中安装 NuGet 包。 您可以通过项目菜单或右键单击解决方案资源管理器中的项目来访问它。
选择-管理-NuGet-软件包
现在,从浏览选项卡 -> 搜索 IronXL.Excel -> 安装
搜索 IronXL
可以直接访问 NuGet 网站并下载软件包。 步骤如下
下载和安装 IronXL C# 库的另一种方法是利用以下步骤,通过开发人员命令提示符安装 IronXL NuGet 包。
PM > Install-Package IronXL.Excel
`PM > 安装软件包 IronXL.Excel在解决方案资源管理器中,右键单击 Program.cs 文件,然后单击查看代码。
using IronXL;
using IronXL;
Imports IronXL
全部完成! IronXL 下载、安装后即可使用。 不过,在此之前,我们应该先安装 CsvHelper。
要下载和安装 CsvHelper C# 库,请使用以下步骤,通过开发人员命令提示符安装 NuGet 软件包。
PM> Install-Package CsvHelper -Version 27.2.1
.从 NuGet 网站下载: https://www.nuget.org/packages/CsvHelper/
逗号分隔值(CSV) 文件是一个使用逗号分隔值的分隔文本文件。 文件的每一行都是一条数据记录。 要操作这些文件进行计算是一项具有挑战性的任务,IronXL.Excel 提供了一个相当不错且简单的选择,无需 Microsoft Excel 即可完成。 让我们先将 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")
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")
每个 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")
读取单元格值的代码:
// 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
加载并读取工作簿和工作表后,可使用以下代码示例对公式进行更改或应用于特定单元格。 代码如下
// 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()
使用 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
阅读 CSV 文件是一项看似简单实则困难重重的工作。 CsvHelper 库可以轻松编写类型安全、快速和灵活的代码。
这是 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
我们将把每一行映射到一个 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
读取 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
数据类型为 IEnumerable
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
尽管 bool 是标准的 .NET 类型,但默认转换器只能处理 True/False 值,而我们的 CSV 文件是 Yes/No。在这里,我们需要子类化 DefaultTypeConverter,然后覆盖 ConvertFromString 方法。
IronXL 是一个公开的商业软件。 C# Excel 库. 它可免费用于开发,也可随时授权用于商业部署。提供许可证适用于单个项目使用、单个开发人员、机构和跨国公司,以及 SaaS 和 OEM 再分发。 所有许可证均包含 30 天退款保证、一年的产品支持和更新、开发/分期/生产有效期以及永久许可证。(一次性购买). 精简版软件包从 $749 开始。
CsvHelper - 读写 CSV 文件,可完全免费用于商业用途。
IronXL.Excel 是一个完整的库,可提供处理 Excel 文件所需的一切功能。它易于使用,能将各种格式转换为 XLSX,以及将 XLSX 转换为 CSV 等其他格式。这种相互转换为用户提供了灵活性,可轻松处理各种文件格式。
另一方面,CsvHelper 是专为处理 CSV 文件格式而设计的,这意味着它只能处理 CSV 文件。 所有代码示例均可在 CsvHelper 文档文件中找到。 文档为您提供了如何在项目中使用 CsvHelper 的指南。
IronXL 与 CsvHelper 相比优势明显,因为它支持用户使用多种格式。 此外,您还可以根据自己的选择应用公式和样式,而 CsvHelper 只允许读写 CSV 文件,且选项有限。 此外,您不能在现有 CSV 文件中添加新记录,因为这只会覆盖以前的条目。