在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
处理 CSV 文件是一项具有挑战性的任务。 不过,如今有许多库可以帮助开发人员完成这项任务,而且无需安装 Microsoft Excel。
在本文中,我们将讨论和比较如何在 C# .NET 技术中以编程方式处理 Microsoft Excel 文档,无论是 CSV 格式还是标准 Excel 格式,都可以使用两个最流行的库 IronXL 和 CSVWriter。
让我们先看看这两个库都有哪些功能。
IronXL for .NET 是一个.NET 库,便于使用 C# 阅读和编辑 Microsoft Excel 文档。 IronXL. Excel 是一个独立的 .NET 软件库,用于读取各种电子表格格式。 它不需要安装 Microsoft Excel,也不依赖于 Interop。
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 库。 极其快速、灵活、易于使用。 支持编写自定义类对象。
使用以下步骤创建一个控制台应用程序:
创建项目 - 控制台应用程序
在 "附加信息 "页面中,指定您希望使用的框架版本。 我们将在本例中使用 .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。
要使用 CSVWriter,您需要下载并安装 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 方法 CSVWriter 附带提供的分隔符,可以在为 C# 发布的非常简单的 CSV writer 中处理所有字符和新行字符。 下面我们将了解如何使用 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 天退款保证、一年的产品支持和更新、开发/分期/生产有效期以及永久许可证。(一次性购买). 精简版软件包从 $749 开始。
提供分隔符的 CSVWriter 是一个逗号分隔元素,完全免费,适合商业使用。
IronXL.Excel 是一个完整的库,可提供处理 Excel 文件所需的一切功能。它可以将各种格式转换为 XLSX,也可以将 XLSX 转换为 CSV 等其他格式。这种相互转换为用户提供了轻松处理其他文件格式的灵活性。
另一方面,CSVWriter 只适用于 CSV 文件格式,而且选项非常有限。 用户不能在不同的文件格式之间切换,而使用 IronXL 则可以。 所有代码示例均可在 CsvHelper 文档文件中找到。 本文档提供了如何在您的项目中使用 CSVWriter 的指南。
与 CSVHelper.CSVWriter 相比,IronXL 具有明显的优势,因为它支持处理多种格式。 此外,您还可以根据自己的选择应用公式和样式,而 CsvHelper 只允许读写 CSV 文件,且选项有限。 此外,您不能在现有 CSV 文件中添加新记录,因为这只会覆盖以前的条目。