IRONSOFTWAREHOME
USING IRONXL

如何使用 IronXL 在 C# 中读取 CSV 文件

Curtis Chau
Curtis Chau
Updated: 2026年6月28日

使用IronXL ,在 C# .NET中读取 CSV 文件变得非常简单——只需调用一个方法,即可将逗号分隔的数据加载到结构化工作簿中,而无需任何自定义解析代码。 本指南将逐步介绍您需要掌握的所有技术:基本加载、自定义分隔符、DataTable 转换、单元格级访问、错误处理以及导出为 Excel 格式。

在 .NET 中读取 CSV 文件最简单的方法是什么?

最简单的方法是使用WorkBook.LoadCSV将 CSV 数据直接导入到工作簿结构中。 此单一方法可以自动处理解析、分隔符检测和数据组织——无需创建StreamReader或手动处理每个字符串行。

通过 Visual Studio 中的 NuGet 包管理器控制台安装 IronXL。 打开您的 .NET 项目并运行:

PM > Install-Package IronXL.Excel

读取CSV .NET:使用IronXL的最简单C#方法:图片1 - 安装

using IronXL;

// 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输入

输出

读取CSV .NET:使用IronXL的最简单C#方法:图片3 - 控制台输出

LoadCSV方法接受三个参数:文件路径、用于内部表示的目标Excel格式和分隔值的分隔符字符。 加载完成后,即可通过DefaultWorkSheet属性访问 CSV 内容,该属性提供包含所有导入记录的主工作表。

嵌套循环结构迭代通过工作表中的每个CellValue属性将单元格内容作为对象返回,同时制表符字符在控制台输出中创建可读的列分隔。 无论源文件包含 10 行还是包含数千条记录的大型 CSV 文件,此模式都同样适用。

IronXL可在.NET Framework、 .NET Core和.NET 5+ 上运行,无需安装 Microsoft Office,因此非常适合ASP.NET Core和.NET Core Web API 项目。 该库可在NuGet上获取,并可轻松集成到任何类型的项目中。 如果您更想了解库为您处理了哪些内容,下一节将介绍手动解析涉及的内容。

手动 CSV 解析与使用库相比有何不同?

了解IronXL所消除的复杂性有助于阐明其价值。 手动 CSV 解析需要处理多种边缘情况,这些情况看似简单,但在任何项目中都会很快成为问题。

using System.IO;

// 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输入

输出

读取CSV .NET:使用IronXL的最简单C#方法:图片5 - 手动CSV解析输出

当 CSV 字段中包含带引号的字符串中的嵌入式逗号时,手动方法会失效——这种情况在地址字段或描述中很常见。 正确读取文件需要处理带引号的字段、转义引号、多行值和不同的编码。 创建自己的解析器意味着创建一个StreamReader,实现状态机逻辑,并自行管理整个读取过程。 对于一个原本只需一行代码就能完成的事情来说,这简直是冗长的模板代码。

IronXL 的替代方案可以自动处理所有极端情况:

using IronXL;

// 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();
}

WorkBook类在内部管理解析的复杂性,让您专注于数据处理而不是数据提取。 您可以在IronXL功能概述中阅读更多关于 IronXL 全部功能的信息。

如何处理不同的CSV分隔符?

CSV 文件并非总是使用逗号作为分隔符。 欧洲系统导出时经常使用分号,因为十进制数字中会出现逗号。 制表符分隔值 (TSV) 和管道分隔文件经常出现在各种应用程序和旧系统的数据导出中。

using IronXL;

// 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中接受任何单个字符或转义序列作为字段分隔符。 制表符字符使用\t转义序列。 加载后,无论原始格式如何,数据结构都将保持一致,从而可以轻松处理来自多个来源、分隔符各不相同的 CSV 文件。 大多数 CSV 文件的默认值是逗号,但这种灵活性可以处理项目遇到的任何变化。

输入

读取CSV .NET:使用IronXL的最简单C#方法:图片6 - 分号分隔的CSV文件输入

输出

读取CSV .NET:使用IronXL的最简单C#方法:图片7 - 分号分隔的输出

ColumnCount属性提供快速验证文件是否加载正确——特别有用于处理不熟悉的数据源或验证ASP.NET Core应用程序中的用户上传。

编码注意事项

当读取包含非 ASCII 字符(例如法语或德语数据中的重音字母)的文件时, IronXL会自动从文件的字节顺序标记 (BOM) 读取编码。 对于没有 BOM 的文件,您可能需要在源端验证编码。 微软的文件编码文档为.NET中的编码类型提供了详尽的参考。

将 CSV 转换为 DataTable 的最佳方法是什么?

将CSV数据转换为DataTable可以实现与数据库操作的集成、UI应用中的数据绑定和LINQ查询。 ToDataTable方法只需调用一次即可完成此转换。

using IronXL;
using System.Data;

// 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 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}");
}

false)。 当设置为row["Name"]实现直观的数据访问。

使用 DataTable 进行数据库和 UI 集成

这种转换对于需要使用SqlBulkCopy进行数据库批量插入的场景、填充Windows Forms应用程序中的DataGridView控件或执行复杂数据转换的LINQ表达式来说证明了其价值。 DataTable格式在您的.NET Core Web API项目中还可以自然地与Entity Framework和其他ORM工具集成。 您可以在IronXL DataTable 指南中阅读更多关于 DataTable 导出模式的信息。

有关在.NET中处理表格数据的更多模式,请参阅 Microsoft 的 ADO .NET概述,这是一份权威参考资料。

如何将CSV文件转换为Excel格式?

IronXL.Excel 的突出功能之一是将 CSV 数据转换为适当的 Excel 格式。 这样就可以向原本扁平的 CSV 数据添加公式、格式、图表和多个工作表——这是仅使用 CSV 输出无法实现的。

using IronXL;

// Load CSV data from file path
string path = "quarterly_sales.csv";
WorkBook workbook = WorkBook.LoadCSV(path, ExcelFileFormat.XLSX, ",");
// Save as Excel XLSX format -- creates a 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数据

输出

读取CSV .NET:使用IronXL的最简单C#方法:图片9 - Excel输出

读取CSV .NET:使用IronXL的最简单C#方法:图片10 - CSV到Excel输出

当需要对从数据库或 API 导出的 CSV 文件进行增强后再分发给用户时,此工作流程尤其有用。 转换后,Excel 文件可以添加其他格式、公式,或与其他工作表合并——所有这些都可以通过 IronXL 的编辑功能以编程方式完成。 该过程完全可编写脚本,因此适用于自动化报告流程或计划任务。

如何访问 CSV 数据中的特定单元格值?

除了遍历所有记录外,IronXL.Excel 还可使用熟悉的 Excel 风格寻址直接访问单元格。 这样才能在不同的数据类型中进行有针对性的数据提取和类型安全的值检索。

using IronXL;

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类提供类型特定的访问器,包括DateTimeValue。 这些访问器会自动处理解析和转换,与将所有内容存储为字符串值相比,无需手动进行类型转换。

使用A2:A10这样的标记进行范围选择返回一个Range对象,该对象支持迭代、聚合函数和批量操作。 在从大型 CSV 文件中提取特定列或矩形数据区域时,这一点很有价值。 例如,您可以从特定列构建值列表,或者将筛选后的数据写入另一个文件。有关更多模式,请参阅IronXL范围指南

读取 CSV 文件时如何处理错误?

生产环境应用需要编写防御性代码来保护文件操作。 CSV 读取失败可能有以下几个原因:文件不存在、访问被拒绝、数据格式错误或内存不足以处理非常大的文件。 在try/catch块中包装IronXL调用并在加载前验证路径,可以在各种环境中提供可靠的行为。

using IronXL;
using System.IO;

string filePath = "customers.csv";
if (!File.Exists(filePath))
{
    Console.WriteLine($"File not found: {filePath}");
    return;
}
try
{
    WorkBook workbook = WorkBook.LoadCSV(filePath, ExcelFileFormat.XLSX, ",");
    WorkSheet sheet = workbook.DefaultWorkSheet;
    DataTable dataTable = sheet.ToDataTable(true);
    Console.WriteLine($"Loaded {dataTable.Rows.Count} records successfully.");
}
catch (IronXL.Exceptions.IronXLException ex)
{
    Console.WriteLine($"IronXL parsing error: {ex.Message}");
}
catch (IOException ex)
{
    Console.WriteLine($"File access error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"Unexpected error: {ex.Message}");
}

CSV 数据的验证模式

除了捕获异常之外,在加载后验证行数和列数还有助于检测截断的文件或意外的架构更改。 将sheet.RowCount与预期最小值进行比较,或验证特定列标题是否存在于第一行中,可以在数据问题传播到下游之前的早期阶段检测到问题。 微软的异常处理指南涵盖了.NET中结构化错误处理的最佳实践。

对于处理用户上传的 CSV 文件的应用程序,务必在加载之前验证文件大小,清理文件名,并在上传端点限制允许的内容类型。 这些预防措施可以防止因文件过大而导致资源耗尽,并防止路径遍历攻击。

IronXL包含自己的异常类型IronXL.Exceptions.IronXLException用于库特定错误,这使得可以轻松区分解析失败与一般输入/输出问题。 您可以在IronXL API 参考文档中找到更多详细信息。

如何读取大型 CSV 文件而不会出现内存问题?

对于包含数十万行数据的文件,一次性将整个数据集加载到内存中可能不太实际。 IronXL将整个文件读取到WorkBook对象中,保持所有数据在内存中。 对于大规模ETL(提取、转换、加载)场景,一个实用的策略是通过在加载前拆分源文件或通过从StreamReader流式传输行并将块写入单独的工作簿来按批次处理CSV。

IronXL文档中关于读取 Excel 文件的部分涵盖了大型工作负载的性能注意事项。 专门针对CSV,由于CSV格式的逐行结构,当数据集对单个内存加载过大时,简单的File.ReadAllLines与手动分批处理可以提供可预测的内存占用。

IronXL与其他 CSV 库的比较

IronXL并不是.NET唯一的 CSV 库。 CsvHelper是一个广泛使用的开源替代方案,专门用于流式传输、记录映射和基于属性的配置。 主要区别在于范围:CsvHelper 只专注于 CSV,而IronXL处理整个电子表格生态系统——通过一个统一的 API 读取、写入和转换 XLSX、XLS、CSV 和其他格式。 如果您的应用程序已经使用IronXL进行 Excel 操作,那么使用同一个库处理 CSV 文件可以避免额外的依赖项。 如果您只处理 CSV 格式并且需要流式传输支持,那么流式 CSV 库可能更适合您。

IronXL与 CsvHelper: .NET中读取 CSV 文件的主要区别
特征IronXLCsvHelper
CSV 阅读
Excel (XLSX/XLS) 支持
流式传输大型文件仅内存中是的(流媒体)
自定义分隔符是的(listDelimiter)是的(配置)
DataTable 转换内置函数(ToDataTable)手动地图
License商业的开源(MS-PL)

下一步计划是什么?

如果使用正确的方法,在 .NET 中读取 CSV 文件只需极少的工作量。 IronXL的LoadCSV方法自动处理解析复杂性,支持各种分隔符,提供对结构化数据的即时访问,并通过单一方法调用转换到Excel或DataTable。 无论您是构建ASP.NET Core应用程序、 .NET Core Web API 还是控制台项目,该库都能简化从开始到结束的 CSV 处理。

探索IronXL 的更多功能,以扩展您在此处学到的知识:

IronXL产品页面——完整功能列表和许可信息 -如何在 C# 中读取 Excel 文件——将 CSV 功能扩展到 XLSX/XLSX -如何使用 C# 编写 Excel 文件——以编程方式创建和导出电子表格 -数据表和数据集导出-- 连接到.NET工作流 IronXL许可——部署许可选项

开始免费试用以体验IronXL如何简化您.NET项目中的CSV文件读取。 对于生产部署,许可选项包括永久使用权和一年的支持服务。

Curtis Chau
技术作家

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

...
阅读更多

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户