在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
处理 CSV 文件是一项具有挑战性的任务。不过,如今有许多库可以帮助开发人员完成这项任务,而且无需安装 Microsoft Excel。
在本文中,我们将讨论并比较如何在 C# .NET 技术中使用两个最流行的库 IronXL 和 CSVWriter 以编程方式处理 CSV 格式或标准 Excel 格式的 Microsoft Excel 文档。
首先让我们看看这两个库都有哪些功能。
IronXL 是一个.NET 库,它便于使用 C# 阅读和编辑 Microsoft Excel 文档。IronXL.Excel 是一个独立的 .NET 软件库,用于读取多种电子表格格式。它不需要安装 Microsoft Excel,也不依赖于 Interop.NET Framework。
IronXL 是一个直观的 C# 应用程序接口,可让你在 .NET 中以闪电般的速度读取、编辑和创建 Excel 电子表格文件。IronXL 完全支持 .NET Core、.NET Framework、Xamarin、Mobile、Linux、macOS 和 Azure。
IronXL 是一款领先的 .NET core 和 .NET framework Excel 电子表格库,适用于 C#。
用于编写 CSV 文件的 .NET 库。极其快速、灵活、易用。支持编写自定义类对象
使用以下步骤创建控制台应用程序:
创建项目 - 控制台应用程序
创建项目 - .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。
要使用 CSVWriter,您需要下载并安装 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 方法 CSVWriter 提供了分隔符,所有字符和新行字符都可以通过一个非常简单的 CSV writer(C# 写入器)来处理。下面我们将了解如何使用 CSVWriter 写入数据。
使用 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 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"
}
}
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 Using
我们需要记住,每次运行程序时,旧的 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 Using
不过,向现有文件添加内容比较麻烦,因为添加时可能会改变排序,或者添加了新的属性。我们在追加时应确保考虑到这一点。
IronXL 是一款开放式商业软件 C# Excel 库.它可免费用于开发,也可随时授权用于商业部署。提供许可证适用于单个项目使用、单个开发人员、机构和跨国公司,以及 SaaS 和 OEM 再分发。所有许可证都包括 30 天退款保证、一年的产品支持和更新、开发/分期/生产的有效性以及永久许可证。 (一次性购买).Lite 软件包从 $749 开始。
带分隔符的 CSVWriter 是一个以逗号分隔的元素,可完全免费用于商业用途。
IronXL 是一个完整的库,可提供处理 Excel 文件所需的一切功能。它能将各种格式转换为 XLSX,也能将 XLSX 转换为 CSV 等其他格式。这种相互转换为用户提供了轻松处理其他文件格式的灵活性。
另一方面,CSVWriter 只能处理 CSV 文件格式,而且选项非常有限。用户不能在不同的文件格式之间切换,而 IronXL 则可以。所有代码示例均可在 CsvHelper 文档文件中找到。本文档提供了如何在项目中使用 CSVWriter 的指南。
与 CSVHelper.CSVWriter 相比,IronXL 具有明显的优势,因为它支持多种格式。此外,你还可以根据自己的选择应用公式和样式,而 CsvHelper 只允许读写 CSV 文件,而且选项有限。此外,你还不能在现有的 CSV 文件中添加新记录,因为它只会覆盖以前的条目。