跳至页脚内容
使用 IRONXL

阅读 CSV .NET:使用 IronXL 的最简单 C# 方法

阅读 CSV .NET:使用 IronXL 的最简单 C# 方法。

有了正确的库,在 .NET 应用程序中读写 CSV 文件就变得非常简单了。 开发人员无需编写自定义解析逻辑来处理分隔符、带引号字段和各种数据类型,只需调用一个方法即可加载 CSV 数据,并立即以表格格式访问结构化电子表格数据。

IronXL 通过将逗号分隔文件视为 Excel 工作簿来转换 CSV 处理。 该 .NET 库消除了手动字符串解析的复杂性,同时提供了强大的功能,如 数据表转换、单元格级访问和无缝 Excel 格式输出。 该库适用于 .NET Framework、.NET Core 和 .NET 5+,无需安装 Microsoft Office,因此非常适合 ASP.NET Core 和 .NET Core Web API 项目。

本指南展示了读取 CSV 文件、处理自定义分隔符、将记录转换为 DataTables 以及将 CSV 文件写入 Excel 格式的实用技术,所有这些都只需使用最少的代码。 每个代码示例都包含详细的解释,以帮助您理解系统的工作原理。

使用 CSV 文件简介

CSV 文件(逗号分隔值)因其简洁性和广泛的兼容性而成为数据交换和存储的主要工具。 无论您是将数据导入数据库、导出报告,还是与第三方系统集成,CSV 文件都是处理表格数据的轻量级灵活格式。 在 .NET 中,处理 CSV 文件是一项常见任务--开发人员经常需要解析、读取和写入 CSV 数据,作为业务逻辑、报表或数据迁移工作流的一部分。

.NET系统提供了多种处理CSV文件的方法,从基本的字符串和文件操作到像CsvHelper这样强大的库。 正确的解析至关重要,因为即使是一个简单的逗号,当它出现在引号字段内或作为数据本身的一部分时,也会带来复杂性。 通过利用正确的 .NET 工具并了解 CSV 解析的细微差别,开发人员可以确保数据完整性并简化应用程序中的数据处理。

在 .NET 中读取 CSV 文件最简单的方法是什么? 最简单的方法是使用 [WorkBook.LoadCSV](/csharp/excel/object-reference/api/IronXL.WorkBook.html) 方法将 CSV 数据直接导入工作簿结构。 这种单一方法可自动处理解析、分隔符检测和数据组织,无需创建新的 `StreamReader` 或手动处理每一行字符串。 通过 Visual Studio 中的 NuGet 包管理器控制台安装 IronXL。 打开您的 .NET 项目并运行: ```shell :ProductInstall ``` ![阅读 CSV .NET:使用 IronXL 的最简单 C# 方法:图片 1 - 安装](/static-assets/excel/blog/read-csv-net/read-csv-net-1.webp)。 ```cs using IronXL; using System; class Program { static void Main(string[] args) { // Load CSV file into a workbook with one method call WorkBook workbook = WorkBook.LoadCSV("sales_data.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: ","); // Access the default worksheet containing CSV data WorkSheet sheet = workbook.DefaultWorkSheet; // Display all rows and CSV columns foreach (var row in sheet.Rows) { foreach (var cell in row) { Console.Write(cell.Value + "\t"); } Console.WriteLine(); } } } ``` ### 输入 ![阅读 CSV .NET:使用 IronXL 的最简单 C# 方法:图片 2 - CSV 输入示例](/static-assets/excel/blog/read-csv-net/read-csv-net-2.webp)。 ### 输出 ![阅读 CSV .NET:使用 IronXL 的最简单 C# 方法:图片 3 - 控制台输出](/static-assets/excel/blog/read-csv-net/read-csv-net-3.webp)。 另外,您也可以使用 CsvHelper 库读取 CSV 文件,该库是 .NET 中处理 CSV 操作的常用工具。 要使用 CsvHelper 读取 CSV 文件,请创建一个 `StreamReader` 实例,然后创建一个新的 `CsvReader` 实例,该实例通常分配给一个变量,如 `var csv` 或 `var reader`: ```cs using (var reader = new StreamReader("sales_data.csv")) using (var csv = new CsvHelper.CsvReader(reader, System.Globalization.CultureInfo.InvariantCulture)) { var records = csv.GetRecords().ToList(); // Process records as needed } ``` 您还可以通过创建 `StreamWriter` 和 `CsvWriter` 实例,使用 CsvHelper 写入 CSV 文件。 `LoadCSV` 方法接受三个参数:文件路径、用于内部表示的目标 Excel 格式和分隔值的分隔符。 加载后,CSV 内容可通过 [DefaultWorkSheet](/csharp/excel/object-reference/api/IronXL.WorkBook.html) 属性访问,该属性提供了包含所有导入记录的主工作表。 嵌套循环结构遍历工作表中的每个 `Row` 行,然后遍历该行中的每个 `Cell` 单元。 `Value` 属性可将单元格内容作为对象返回,而 tab 字符可在控制台输出中创建可读的分栏。 无论源文件包含 10 行,还是处理内存中包含数千条记录的大型 CSV 文件,该模式的工作原理都是一样的。

手动 CSV 解析与使用库相比有何不同? 了解 IronXL 所消除的复杂性有助于理解其价值。 手动 CSV 解析需要处理多种边缘情况,这些情况看似简单,但在任何项目中都会很快成为问题。 ```cs using System; using System.IO; class Program { static void Main(string[] args) { // Manual approach - requires extensive code for basic functionality string path = "data.csv"; string[] lines = File.ReadAllLines(path); foreach (string line in lines) { // This breaks when CSV fields contain commas inside quotes string[] fields = line.Split(','); foreach (string field in fields) { Console.Write(field.Trim() + "\t"); } Console.WriteLine(); } } } ``` ### 输入 ![阅读 CSV .NET:使用 IronXL 的最简单 C# 方法:图像 4 - CSV 输入](/static-assets/excel/blog/read-csv-net/read-csv-net-4.webp)。 ### 输出 ![阅读 CSV .NET:使用 IronXL 的最简单 C# 方法:图片 5 - 手动 CSV 解析输出](/static-assets/excel/blog/read-csv-net/read-csv-net-5.webp)。 当 CSV 字段包含引号字符串中的逗号时,手动方法就会失效--这种情况在地址栏或描述中很常见。 正确读写 CSV 文件需要处理带引号字段、转义引号、多行值和不同的编码。 使用 CsvHelper 库或类似的 CSV Helper 包会增加依赖性,而推出自己的解析器则意味着要创建一个新的 `StreamReader` ,实现 `var` 阅读器模式,并自行管理整个文件读取过程。 ```cs using IronXL; using System; class Program { static void Main(string[] args) { // IronXL approach - handles all edge cases automatically WorkBook workbook = WorkBook.LoadCSV("data.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: ","); var records = workbook.DefaultWorkSheet.Rows; foreach (var row in records) { foreach (var cell in row) { Console.Write(cell.Value + "\t"); } Console.WriteLine(); } } } ``` IronXL 版本在完成相同任务的同时,还能正确处理带引号的 CSV 字段、特殊字符和编码变化。 `WorkBook` 类在内部管理解析的复杂性,使开发人员能够专注于处理数据而不是提取数据。 与需要一个新的 `CsvReader` 实例或 `CsvHelper` 软件包配置的方法不同,IronXL 无需额外设置,只需加载并使用即可。

如何处理不同的 CSV 分隔符? CSV 文件并不总是使用逗号作为分隔符。 由于十进制数字中使用逗号,欧洲系统导出经常使用分号,而制表符分隔值(TSV)和管道分隔文件经常出现在各种应用程序的数据导出中。 ```cs using IronXL; using System; class Program { static void Main(string[] args) { // Reading a semicolon-delimited file (common in European exports) WorkBook euroData = WorkBook.LoadCSV("german_report.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: ";"); // Reading a tab-separated file WorkBook tsvData = WorkBook.LoadCSV("exported_data.tsv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: "\t"); // Reading a pipe-delimited file WorkBook pipeData = WorkBook.LoadCSV("legacy_system.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: "|"); // Access data identically regardless of original delimiter WorkSheet sheet = euroData.DefaultWorkSheet; int rowsCount = sheet.RowCount; Console.WriteLine($"Loaded {rowsCount} rows with {sheet.ColumnCount} CSV columns"); } } ``` `LoadCSV` 中的 `listDelimiter` 参数可接受任何单字符或转义序列作为字段分隔符。 Tab 字符使用 `\t` 转义序列。 加载后,无论原始格式如何,数据结构都将保持一致,从而可以轻松处理来自多个来源、分隔符各不相同的 CSV 文件。 大多数 CSV 文件的默认值是逗号,但这种灵活性可以处理项目遇到的任何变化。 ### 输入 ![阅读 CSV .NET:使用 IronXL 的最简单 C# 方法:图片 6 - 以分号分隔的 CSV 文件输入](/static-assets/excel/blog/read-csv-net/read-csv-net-6.webp)。 ### 输出 !a href="/static-assets/excel/blog/read-csv-net/read-csv-net-7.webp">Read CSV .NET:使用 IronXL 的最简单 C# 方法:图片 7 - 分号分隔输出。 [`RowCount`](/csharp/excel/object-reference/api/IronXL.WorkSheet.html)和`ColumnCount`类属性可快速验证文件加载是否正确,这在处理不熟悉的数据源或验证 ASP.NET Core 应用程序中的用户上传时尤其有用。

将 CSV 转换为 DataTable 的最佳方法是什么? 将 CSV 数据转换为 `DataTable` 可实现与数据库操作、UI 应用程序中的数据绑定和 LINQ 查询的集成。 `ToDataTable` 方法只需调用一次即可完成转换。 ```cs using IronXL; using System; using System.Data; class Program { static void Main(string[] args) { // Load CSV and convert to DataTable WorkBook workbook = WorkBook.LoadCSV("customers.csv", ExcelFileFormat.XLSX, ","); WorkSheet sheet = workbook.DefaultWorkSheet; // Convert worksheet to DataTable - true parameter uses CSV file header as column names DataTable dataTable = sheet.ToDataTable(true); // DataTable is now ready for database operations, binding, or LINQ queries Console.WriteLine($"DataTable created with {dataTable.Columns.Count} columns:"); foreach (DataColumn column in dataTable.Columns) { // Property names from CSV header become column names Console.WriteLine($" - {column.ColumnName}"); } Console.WriteLine($"\nTotal records: {dataTable.Rows.Count}"); // Access data using standard DataTable syntax foreach (DataRow row in dataTable.Rows) { // Access by column index or name attribute string name = row["Name"].ToString(); string email = row["Email"].ToString(); Console.WriteLine($"Customer: {name}, Email: {email}"); } } } ``` `ToDataTable` 中的布尔参数决定第一行应成为列标题(`true`)还是数据(`false`)。 当设置为`true`时,生成的`DataTable`的列将包含 CSV 文件标题行中的属性名称,从而可以使用列名(如`row["Name"]`)进行直观的数据访问。 这种转换对于需要使用 `SqlBulkCopy` 进行数据库批量插入、在 Windows 窗体应用程序中填充 `DataGridView` 控件或使用 LINQ 表达式执行复杂数据转换的场景非常有价值。 `DataTable` 格式还能在您的 .NET Core Web API 项目中与 Entity Framework 和其他 ORM 工具自然集成。

CSV 文件能否转换为 Excel 格式? IronXL.Excel 的突出功能之一是将 CSV 数据转换为适当的 Excel 格式。 这使得原本平面的 CSV 数据可以添加公式、格式化、图表和多个工作表,而这是单独编写 CSV 文件所无法实现的。 ```cs using IronXL; using System; class Program { static void Main(string[] args) { // Load CSV data from file path string path = "quarterly_sales.csv"; WorkBook workbook = WorkBook.LoadCSV(path, ExcelFileFormat.XLSX, ","); // Save as Excel XLSX format - create new Excel file workbook.SaveAs("quarterly_sales.xlsx"); // Alternative: Save as legacy XLS format for older Excel versions workbook.SaveAs("quarterly_sales.xls"); Console.WriteLine("CSV successfully converted to Excel format"); } } ``` `SaveAs` 方法会根据文件扩展名自动确定输出格式。 `XLSX` 可创建与 Excel 2007 及更高版本兼容的现代 Office Open XML 文件,而 `XLS` 可为旧版应用程序生成传统的二进制交换文件格式文档。 ### 输入 ![阅读 CSV .NET:使用 IronXL 的最简单 C# 方法:图像 8 - CSV 数据](/static-assets/excel/blog/read-csv-net/read-csv-net-8.webp)。 ### 输出 ![阅读 CSV .NET:使用 IronXL 的最简单 C# 方法:图像 9 - Excel 输出](/static-assets/excel/blog/read-csv-net/read-csv-net-9.webp)。 ![阅读 CSV .NET:使用 IronXL 的最简单 C# 方法:图像 10 - CSV 到 Excel 输出](/static-assets/excel/blog/read-csv-net/read-csv-net-10.webp)。 当从数据库或应用程序接口导出的 CSV 需要在分发给用户之前进行改进时,这种工作流程就显得尤为有用。 转换后,Excel 文件可以获得额外的格式化、公式或与其他工作表组合,所有这些都可以通过 IronXL 的 [综合编辑功能](/csharp/excel/how-to/csharp-edit-excel-file/)以编程方式实现。 与使用带有新的 `StreamWriter` 实例的 `var` 写入器来写入 CSV 文件的方法不同,IronXL 可以无缝处理整个文件转换过程。

如何访问 CSV 数据中的特定单元格值? 除了遍历所有记录外,IronXL.Excel 还可使用熟悉的 Excel 风格寻址直接访问单元格。 这样才能在不同的数据类型中进行有针对性的数据提取和类型安全的值检索。 ```cs using IronXL; using System; // Example class to demonstrate structured data access public class Employee { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } class Program { static void Main(string[] args) { WorkBook workbook = WorkBook.LoadCSV("inventory.csv", ExcelFileFormat.XLSX, ","); WorkSheet sheet = workbook.DefaultWorkSheet; // Access specific cells using Excel-style addresses by index string productName = sheet["A2"].StringValue; int quantity = sheet["B2"].IntValue; decimal price = sheet["C2"].DecimalValue; Console.WriteLine($"Product: {productName}"); Console.WriteLine($"Quantity: {quantity}"); Console.WriteLine($"Price: ${price:F2}"); // Access a range of cells - return records from column A var productRange = sheet["A2:A10"]; Console.WriteLine("\nAll products:"); foreach (var cell in productRange) { Console.WriteLine($" - {cell.StringValue}"); } } } ``` 单元格寻址遵循 Excel 惯例,其中字母代表 CSV 列(A、B、C),数字代表行索引位置(1、2、3)。 [Cell](/csharp/excel/object-reference/api/IronXL.Cell.html) 类提供了特定于类型的访问器,包括 `StringValue`, `IntValue`, `DecimalValue`, `BoolValue` 和 `DateTimeValue` 。 这些访问器可自动处理解析和转换,无需手动进行类型转换,与将所有内容存储为字符串值相比,可减少内存开销。 使用`A2:A10`等符号选择范围会返回一个[范围](/csharp/excel/object-reference/api/IronXL.Range.html)对象,该对象支持迭代、聚合函数和批量操作。 在从大型 CSV 文件中提取特定列或矩形数据区域时,这一点很有价值。 例如,您可能会从特定列中创建一个新的值列表,或将过滤后的数据写入另一个文件。 ## CSV 文件操作中的错误处理 在 .NET 应用程序中处理 CSV 文件时,强大的错误处理功能至关重要。 读写 CSV 文件可能会导致各种问题,如文件丢失、数据畸形或意外的解析错误。 要管理这些场景,最好的做法是将文件和数据操作封装在 try-catch 块中,使应用程序能够优雅地处理异常并提供有意义的反馈。 ## 结论 如果使用正确的方法,在 .NET 中读取 CSV 文件只需极少的工作量。 IronXL 的 `LoadCSV` 方法可自动处理解析的复杂性,支持各种分隔符,并通过熟悉的电子表格概念立即访问结构化数据。无论您是在构建 ASP.NET Core 应用程序、.NET Core Web API 还是控制台项目,该库都能简化 CSV 处理过程。 [开始免费试用](trial-license),体验 IronXL 如何在您的 .NET 项目中简化 CSV 文件的读取。 对于生产部署,[许可选项](/csharp/excel/licensing/)从 $799 开始,包含永久使用权和一年的支持。

常见问题解答

用 C# 阅读 CSV 文件的最简单方法是什么?

在 C# 中读取 CSV 文件最简单的方法是使用 IronXL,它提供了一种直接高效的方法来处理 CSV 数据。

IronXL是否能高效处理大型CSV文件?

是的,IronXL 设计用于高效处理大型 CSV 文件,因此适合处理大量数据集而不会出现性能问题。

IronXL 兼容 .NET 应用程序吗?

IronXL for .NET 与 .NET 应用程序完全兼容,开发人员可以轻松地将 CSV 阅读功能集成到他们的 C# 项目中。

IronXL 是否支持读取具有不同分隔符的 CSV 文件?

IronXL 支持读取带有各种分隔符的 CSV 文件,可灵活处理不同格式的文件。

IronXL 能否解析带标题的 CSV 文件?

是的,IronXL 可以解析带标题的 CSV 文件,让您可以轻松地按列名访问数据。

IronXL 如何简化 CSV 数据操作?

IronXL 通过提供直接在 C# 中读取、编辑和写入 CSV 数据的直观方法,简化了 CSV 数据操作。

IronXL 是否支持异步读取 CSV 文件?

IronXL 支持异步操作,使您能够在不阻塞主应用程序线程的情况下读取 CSV 文件。

IronXL 能否将 CSV 数据转换为 Excel 格式?

IronXL.Excel 可以将 CSV 数据转换为 Excel 格式,使您可以利用 Excel 的高级功能进行数据分析和演示。

IronXL 在读取 CSV 文件时有任何依赖关系吗?

IronXL 是一个独立的库,读取 CSV 文件不需要任何外部依赖性,从而简化了项目中的设置过程。

IronXL 能否用于将数据从 CSV 导出到其他格式?

是的,IronXL 可以将数据从 CSV 导出到包括 Excel 在内的各种格式,为数据处理和报告提供了多功能性。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。