C# CSV库:使用IronXL完整教程
在 C# 中处理 CSV 文件需要一个能够处理除简单行解析之外的其他功能的库。 您需要可靠的编码检测、正确的分隔符处理、强类型识别,并且最好能够在 CSV 和 Excel 之间移动数据而无需维护两个单独的依赖项。 IronXL在一个.NET库中实现了所有这些功能——无需 Microsoft Office,无需 COM 互操作,也无需脆弱的变通方法。 无论您是在服务器上处理平面数据文件、构建数据管道,还是向用户提供电子表格下载, IronXL都为您提供适用于每种格式的统一 API。
如何设置 C# 电子表格库?
通过NuGet安装IronXL只需不到一分钟。 在 Visual Studio 中打开程序包管理器控制台并运行以下命令,或者从任何终端使用.NET CLI:
Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
安装软件包后,将命名空间添加到任何需要处理电子表格数据的文件:
using IronXL;
using IronXL;
Imports IronXL
IronXL 的目标框架为.NET Framework 4.6.2+和所有现代.NET版本(Core、5、6、7、8、9 和 10)。 它可在 Windows、Linux 和 macOS 上运行,因此既适用于桌面工具,也适用于容器化服务器工作负载。 请访问IronXL安装指南,获取有关软件包来源和许可证激活的分步说明。
如何在C#中读取CSV文件?
使用IronXL读取 CSV 文件与加载任何电子表格遵循相同的模式。 调用 WorkBook.Load 并传入文件路径,IronXL 会根据文件扩展名推断文件格式——无需额外配置:
// Load a CSV file into a WorkBook
WorkBook workBook = WorkBook.Load("sales_data.csv");
// Access the default worksheet
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read individual cells by Excel-style address
string customerName = workSheet["A2"].StringValue;
decimal orderAmount = workSheet["B2"].DecimalValue;
// Iterate rows, starting at index 1 to skip the header
for (int i = 1; i < workSheet.Rows.Count(); i++)
{
var row = workSheet.Rows[i];
Console.WriteLine($"Customer: {row.Columns[0].Value}, Amount: {row.Columns[1].Value}");
}
// Load a CSV file into a WorkBook
WorkBook workBook = WorkBook.Load("sales_data.csv");
// Access the default worksheet
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read individual cells by Excel-style address
string customerName = workSheet["A2"].StringValue;
decimal orderAmount = workSheet["B2"].DecimalValue;
// Iterate rows, starting at index 1 to skip the header
for (int i = 1; i < workSheet.Rows.Count(); i++)
{
var row = workSheet.Rows[i];
Console.WriteLine($"Customer: {row.Columns[0].Value}, Amount: {row.Columns[1].Value}");
}
Imports System
' Load a CSV file into a WorkBook
Dim workBook As WorkBook = WorkBook.Load("sales_data.csv")
' Access the default worksheet
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
' Read individual cells by Excel-style address
Dim customerName As String = workSheet("A2").StringValue
Dim orderAmount As Decimal = workSheet("B2").DecimalValue
' Iterate rows, starting at index 1 to skip the header
For i As Integer = 1 To workSheet.Rows.Count() - 1
Dim row = workSheet.Rows(i)
Console.WriteLine($"Customer: {row.Columns(0).Value}, Amount: {row.Columns(1).Value}")
Next
WorkBook 对象公开了完整的电子表格模型。 您可以使用熟悉的 Excel 表示法(例如 "A2")访问单元格,内置的转换属性 -- StringValue、DecimalValue、IntValue、DateTimeValue -- 可以处理类型强制转换,因此您不必手动解析字符串。
有哪些小区寻址选项?
除了单单元格访问外, IronXL还支持范围表示法和行/列迭代。 你可以使用类似 workSheet["A2:C10"] 的范围表达式来访问矩形单元格块,并将其作为扁平集合进行迭代。 当您想要验证或转换已知数据块而无需编写嵌套循环时,这非常有用:
// Access a range and print each value
foreach (var cell in workSheet["A2:C10"])
{
Console.WriteLine($"{cell.AddressString}: {cell.Value}");
}
// Access a range and print each value
foreach (var cell in workSheet["A2:C10"])
{
Console.WriteLine($"{cell.AddressString}: {cell.Value}");
}
' Access a range and print each value
For Each cell In workSheet("A2:C10")
Console.WriteLine($"{cell.AddressString}: {cell.Value}")
Next
对于动态行计数,workSheet.Rows 集合会自动反映加载的数据,因此您无需硬编码行计数。 请参阅C# 读取 CSV 教程,了解更多模式,包括标题检测和多编码文件。
如何将 CSV 行映射到自定义对象?
常见的需求是将表格形式的 CSV 数据转换为类型化的集合。 您可以遍历每一行,并将每一行投影到普通的 C# 类中:
public record SalesRecord(string Customer, decimal Amount, DateTime OrderDate);
WorkBook workBook = WorkBook.Load("sales_data.csv");
WorkSheet workSheet = workBook.DefaultWorkSheet;
var records = new List<SalesRecord>();
// Start at row 1 to skip the header row (row 0)
for (int i = 1; i < workSheet.Rows.Count(); i++)
{
var row = workSheet.Rows[i];
records.Add(new SalesRecord(
Customer: row.Columns[0].StringValue,
Amount: row.Columns[1].DecimalValue,
OrderDate: row.Columns[2].DateTimeValue
));
}
public record SalesRecord(string Customer, decimal Amount, DateTime OrderDate);
WorkBook workBook = WorkBook.Load("sales_data.csv");
WorkSheet workSheet = workBook.DefaultWorkSheet;
var records = new List<SalesRecord>();
// Start at row 1 to skip the header row (row 0)
for (int i = 1; i < workSheet.Rows.Count(); i++)
{
var row = workSheet.Rows[i];
records.Add(new SalesRecord(
Customer: row.Columns[0].StringValue,
Amount: row.Columns[1].DecimalValue,
OrderDate: row.Columns[2].DateTimeValue
));
}
Imports System
Imports System.Collections.Generic
Public Class SalesRecord
Public Property Customer As String
Public Property Amount As Decimal
Public Property OrderDate As DateTime
Public Sub New(customer As String, amount As Decimal, orderDate As DateTime)
Me.Customer = customer
Me.Amount = amount
Me.OrderDate = orderDate
End Sub
End Class
Dim workBook As WorkBook = WorkBook.Load("sales_data.csv")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
Dim records As New List(Of SalesRecord)()
' Start at row 1 to skip the header row (row 0)
For i As Integer = 1 To workSheet.Rows.Count() - 1
Dim row = workSheet.Rows(i)
records.Add(New SalesRecord(
Customer:=row.Columns(0).StringValue,
Amount:=row.Columns(1).DecimalValue,
OrderDate:=row.Columns(2).DateTimeValue
))
Next
这种方法将解析逻辑与业务逻辑清晰地分离,并使应用程序其余部分中的每个记录都具有强类型。
如何在C#中写入CSV文件?
从头开始创建 CSV 文件涉及三个步骤:创建 WorkBook,填充 WorkSheet,然后调用 SaveAsCsv。 该过程与构建任何电子表格的方式类似,从而保证了 API 的一致性,而与输出格式无关:
// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("inventory");
// Write header row
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Quantity";
workSheet["C1"].Value = "Price";
// Write data rows
workSheet["A2"].Value = "Widget A";
workSheet["B2"].Value = 250;
workSheet["C2"].Value = 9.99;
workSheet["A3"].Value = "Gadget B";
workSheet["B3"].Value = 120;
workSheet["C3"].Value = 24.50;
// Export to CSV
workBook.SaveAsCsv("inventory.csv");
// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("inventory");
// Write header row
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Quantity";
workSheet["C1"].Value = "Price";
// Write data rows
workSheet["A2"].Value = "Widget A";
workSheet["B2"].Value = 250;
workSheet["C2"].Value = 9.99;
workSheet["A3"].Value = "Gadget B";
workSheet["B3"].Value = 120;
workSheet["C3"].Value = 24.50;
// Export to CSV
workBook.SaveAsCsv("inventory.csv");
' Create a new workbook and worksheet
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("inventory")
' Write header row
workSheet("A1").Value = "Product"
workSheet("B1").Value = "Quantity"
workSheet("C1").Value = "Price"
' Write data rows
workSheet("A2").Value = "Widget A"
workSheet("B2").Value = 250
workSheet("C2").Value = 9.99D
workSheet("A3").Value = "Gadget B"
workSheet("B3").Value = 120
workSheet("C3").Value = 24.5D
' Export to CSV
workBook.SaveAsCsv("inventory.csv")
SaveAsCsv 处理分隔符放置、包含逗号的字段的引用以及换行符规范化。 您无需手动管理任何这些事项。 IronXL在导出过程中保留数值类型,以便 Excel 或 pandas 等下游工具将数字读取为数字,而不是读取为带引号的文本字符串。
如何将数据表导出为 CSV 文件?
许多应用程序从数据库检索数据到 DataTable。 IronXL 可以通过一次调用将整个 DataTable 插入到工作表中,从而简化批量导出操作:
DataTable dataTable = GetProductsFromDatabase();
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("products");
workSheet.InsertDataTable(dataTable, "A1");
workBook.SaveAsCsv("products.csv");
DataTable dataTable = GetProductsFromDatabase();
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("products");
workSheet.InsertDataTable(dataTable, "A1");
workBook.SaveAsCsv("products.csv");
IRON VB CONVERTER ERROR developers@ironsoftware.com
InsertDataTable 方法从 DataTable 模式写入列标题,并从您提供的地址开始填充所有行。 对于较大的数据集,这种方法比手动遍历行要高效得多。 查看导出为 CSV 的文档,了解包括自定义分隔符和编码设置在内的选项。
如何在C#中实现CSV和Excel之间的转换?
IronXL最有价值的功能之一是 CSV 和 Excel 格式之间的双向转换。 该 API 是对称的 -- Load 可以读取任何受支持的格式,并且 Save 系列方法会将数据写入目标格式:
// Convert CSV to Excel
WorkBook csvWorkBook = WorkBook.Load("data.csv");
csvWorkBook.SaveAs("data.xlsx");
// Convert Excel back to CSV
WorkBook xlsxWorkBook = WorkBook.Load("report.xlsx");
xlsxWorkBook.SaveAsCsv("report.csv");
// Convert CSV to Excel
WorkBook csvWorkBook = WorkBook.Load("data.csv");
csvWorkBook.SaveAs("data.xlsx");
// Convert Excel back to CSV
WorkBook xlsxWorkBook = WorkBook.Load("report.xlsx");
xlsxWorkBook.SaveAsCsv("report.csv");
' Convert CSV to Excel
Dim csvWorkBook As WorkBook = WorkBook.Load("data.csv")
csvWorkBook.SaveAs("data.xlsx")
' Convert Excel back to CSV
Dim xlsxWorkBook As WorkBook = WorkBook.Load("report.xlsx")
xlsxWorkBook.SaveAsCsv("report.csv")
这些转换操作可以保持数据的完整性。 数值保持数值形式,日期字段保持其类型,公式结果在写入之前会计算出其计算值。 当您将多工作表 Excel 文件转换为 CSV 时, IronXL会自动为每个工作表创建一个单独的 CSV 文件:
WorkBook multiSheetWorkBook = WorkBook.Load("quarterly_report.xlsx");
// Produces: quarterly_report.Sheet1.csv, quarterly_report.Sheet2.csv, etc.
multiSheetWorkBook.SaveAsCsv("quarterly_report.csv");
WorkBook multiSheetWorkBook = WorkBook.Load("quarterly_report.xlsx");
// Produces: quarterly_report.Sheet1.csv, quarterly_report.Sheet2.csv, etc.
multiSheetWorkBook.SaveAsCsv("quarterly_report.csv");
Dim multiSheetWorkBook As WorkBook = WorkBook.Load("quarterly_report.xlsx")
' Produces: quarterly_report.Sheet1.csv, quarterly_report.Sheet2.csv, etc.
multiSheetWorkBook.SaveAsCsv("quarterly_report.csv")
这种行为对于下游用户期望每个文件对应一个主题的报告管道尤其有用。CSV写入教程还介绍了其他选项,例如指定分隔符以及控制导出中包含哪些工作表。
如何使用 C# CSV 库读写文件:图 3 - 多页 Excel 文件保存为单独的 CSV 文件
如何使用 C# CSV 库读写文件:图 4 - 原始 Excel 格式文件与转换后的 CSV 文件对比
为什么仅支持 CSV 格式的库无法满足实际项目的需求?
许多 C# 开发人员从 Microsoft.VisualBasic 中的CsvHelper或TextFieldParser开始。 两者都是适用于仅处理 CSV 文件的工作流程的有效工具。 当需求扩大时,差距就会显现:利益相关者要求下载 Excel 文件而不是 CSV 文件,财务部门需要保留公式,或者安全策略要求对文件进行密码保护。 这时,仅支持 CSV 的库会迫使你添加第二个依赖项并维护两条独立的集成路径。 统一的电子表格库从一开始就消除了这种分裂。
| 能力 | IronXL | CsvHelper | TextFieldParser |
|---|---|---|---|
| 阅读 CSV 文件 | 是 | 是 | 是 |
| 写入 CSV 文件 | 是 | 是 | 无 |
| 读取/写入 XLSX 文件 | 是 | 无 | 无 |
| 公式评估 | 是 | 无 | 无 |
| 单元格样式和格式 | 是 | 无 | 无 |
| 受密码保护的文件 | 是 | 无 | 无 |
| 需要依赖办公室 | 无 | 无 | 无 |
| 跨平台(.NET 10) | 是 | 是 | 数量有限 |
统一库还提供哪些额外的电子表格功能?
除了格式转换之外,能够同时处理 CSV 和 Excel 的库还能提供电子表格操作,随着项目的增长,这些操作将变得非常有用。 使用IronXL ,您将获得:
-公式计算-- 您可以在单元格中写入类似 =SUM(B2:B10) 的公式,并在没有 Excel 的情况下读取计算结果。
-单元格和范围样式-- 通过IronXL样式 API应用字体粗细、背景颜色、数字格式和边框。
-密码保护-- 使用 WorkBook.Load("secure.xlsx", "password") 打开加密工作簿,并以加密方式保存新文件。
-命名区域-- 像在 Excel 中一样定义和引用命名区域,从而简化公式编写和数据验证。
-大文件支持-- IronXL在托管代码中处理数据,无需一次性将整个文件加载到内存中,即使对于包含数万行的文件,也能保持内存使用量的可预测性。
IronXL功能页面列出了所有支持的操作。
IronXL如何处理跨平台部署?
电子表格库经常面临的一个挑战是平台特定的行为。 依赖 COM 互操作的库只能在 Windows 上运行,而调用 Office 的库需要安装 Office。 IronXL是完全托管的代码,没有任何原生依赖项,因此同一个二进制文件无需更改即可在 Linux 容器、macOS 开发机器和 Windows 服务器上运行。 这样一来,部署到Azure 、AWS、Docker 或任何.NET 10 目标平台就变得非常简单。
对于使用Dapper或Entity Framework Core等工具构建数据管道的开发人员来说, IronXL非常适合作为序列化层——读取 CSV 输入,使用 ORM 进行处理,并将结果导出为 XLSX 或 CSV 文件。IronXL 的许可页面详细说明了可用于商业用途的许可级别。
下一步计划是什么?
IronXL为您提供一个统一的 API,用于在任何.NET 10 应用程序中读取、写入和转换 CSV 和 Excel 文件。 主要优势显而易见:不依赖 Office,支持跨平台,单元格值支持强类型,并且当需求发生变化时,可以直接从仅支持 CSV 的项目过渡到完整的电子表格功能。
当你准备深入研究时,从与你当前项目最相关的主题开始。 如果您主要处理 CSV 导入管道,那么上面介绍的读取和映射模式可以处理大多数实际场景。 如果您的输出要求有所不同——有时是下游脚本所需的 CSV 文件,有时是最终用户所需的 XLSX 文件——格式转换部分展示了如何使用单个代码库来同时满足这两种需求。
对于构建报告系统或从数据库导出结果的团队来说,InsertDataTable 方法具有良好的可扩展性,并且避免了逐行单元格分配带来的性能开销。 结合单元格样式,即可生成用户无需重新格式化即可在 Excel 中直接打开的报告。
要继续进行,请按照以下步骤操作:
- 使用 NuGet安装库
Install-Package IronXL或dotnet add package IronXL。 2.按照IronXL入门指南中的快速入门步骤加载您的第一个 CSV 文件。 - 当您需要在同一个项目中同时使用 CSV 和 Excel 格式时,请探索 CSV 到 Excel 格式转换教程。
- 查看IronXL对象参考中的API 参考,了解高级单元格操作、公式支持和样式设置。
- 在IronXL试用许可证页面开始免费试用——无需信用卡,包含技术支持。
如果您正在评估其他Iron Software工具的选项, IronSoftware 产品Suite涵盖了使用IronPDF生成 PDF、条形码读取、OCR 等功能——所有这些都共享相同的许可模式和支持渠道。
常见问题解答
什么是IronXL,它如何帮助处理C#中的CSV文件?
IronXL是一个强大的C#库,可让开发人员无缝读取、写入和转换CSV文件。它为Excel工作簿提供了扩展支持,确保高性能和一致的行、列和数据类型处理。
为什么我应该选择IronXL而不是像CsvHelper这样的免费库?
虽然CsvHelper适用于基本的CSV操作,但IronXL以其对Excel工作簿的支持、增强的性能和强大的数据类型处理等特性胜出,使其适用于更复杂的电子表格工作流程。
IronXL能同时处理CSV和Excel格式吗?
是的,IronXL专为高效处理CSV和Excel格式而设计,允许您轻松在两者之间转换。
IronXL是否支持高性能数据处理?
IronXL为高性能而构建,确保数据导入和导出流程顺畅,速度和效率最佳。
是否可以将IronXL与现有电子表格工作流程集成?
当然可以,IronXL可无缝集成到现有电子表格工作流程中,增强跨越CSV和Excel格式的数据管理能力。
是什么使IronXL适合于复杂的CSV文件操作?
IronXL提供强大的功能,如对行、列和数据类型的一致处理,使其成为需要超出基本处理的复杂CSV文件操作的理想选择。
我可以使用IronXL将CSV文件转换为Excel吗?
是的,IronXL的关键功能之一是能够将CSV文件转换为Excel格式,反之亦然,简化数据管理过程。
IronXL如何确保可靠的CSV文件处理?
IronXL通过其高级功能确保对CSV文件的可靠处理,其中包括对复杂数据类型的支持以及与Excel功能的集成。
使用IronXL进行数据导入/导出的好处是什么?
IronXL提供平稳的数据导入/导出过程,为开发人员节省时间和精力,同时确保跨格式的数据完整性和准确性。
IronXL对于C#中CSV操作的新开发人员来说容易使用吗?
是的,IronXL采用用户友好的功能和简单的代码示例进行设计,使新开发人员能够轻松使用其在C#中的CSV操作。


