在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
处理 CSV 文件是一项具有挑战性的任务。现在有许多库可以帮助开发人员完成这项任务,而无需安装 Microsoft Excel。
在本文中,我们将讨论并比较如何在 C# .NET 技术中使用两个最流行的库 IronXL 和 CsvHelper 以编程方式处理 CSV 格式或标准 XLSX 格式的 Microsoft Excel 文档。
首先让我们看看这两个库都有哪些功能。
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#。
一个用于读写 CSV 文件的 .NET 库。速度极快,灵活易用。支持读写自定义类对象。所有示例代码均可在 CsvHelper 文档安装包中找到。
<div 类="hsg-featured-snippet">
<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>
使用以下步骤创建控制台应用程序:
创建项目 - 控制台应用程序
创建项目 - .NET Framework
项目现已创建,我们几乎可以测试这些库了。不过,我们仍需安装并将它们集成到项目中。让我们先安装 IronXL。
您可以使用以下方法下载并安装 IronXL 库:
1.使用 Visual Studio 和 NuGet 软件包
2.直接下载 NuGet 软件包
3.使用 DLL 手动安装
让我们来仔细看看每一个。
Visual Studio 提供了 NuGet 包管理器,用于在项目中安装 NuGet 包。你可以通过 "项目菜单 "或右键单击 "解决方案资源管理器 "中的项目来访问它。
选择-管理-NuGet-软件包
搜索 IronXL
可直接访问 NuGet 网站并下载软件包。具体步骤如下
下载和安装 IronXL C# 库的另一种方法是使用以下步骤,通过开发人员命令提示符安装 IronXL NuGet 包。
1.在解决方案资源管理器中,右键单击 Program.cs 文件,然后单击查看代码。
2.在代码文件顶部添加以下 using 指令:
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 提供了一个相当不错的简便选项,无需 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")
每个工作簿可以包含多个工作表对象。这些对象代表 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 天退款保证、一年的产品支持和更新、开发/分期/生产的有效性以及永久许可证。 (一次性购买).Lite 软件包从 $749 开始。
CsvHelper - 读写 CSV 文件,商业用途完全免费。
IronXL 是一个完整的库,可提供处理 Excel 文件所需的一切功能。它易于使用,能将各种格式转换为 XLSX,也能将 XLSX 转换为 CSV 等其他格式。这种相互转换为用户提供了灵活性,可轻松处理各种文件格式。
另一方面,CsvHelper 专为处理 CSV 文件格式而设计,这意味着它只能处理 CSV 文件。所有代码示例都可以在 CsvHelper 文档文件中找到。文档为您提供了如何在项目中使用 CsvHelper 的指南。
与 CsvHelper 相比,IronXL 的优势非常明显,因为它支持用户使用多种格式。此外,你还可以根据自己的选择应用公式和样式,而 CsvHelper 只允许读写 CSV 文件,且选项有限。此外,你还不能在现有的 CSV 文件中添加新记录,因为它只会覆盖以前的条目。