跳至页脚内容
使用 IRONXL

如何在IronXL中使用.NET Core CSV 读取器:实用示例

在 .NET Core 应用程序中处理 CSV 文件操作是数据导入和导出操作的常见需求。 然而,开发人员在尝试高效解析 CSV 文件内容时,经常会遇到不同的分隔符、数据类型转换和性能问题等挑战。 虽然有像 CsvHelper 包和 TextFieldParser 这样的库可以用于 CSV 解析,但并非所有库都提供与 Excel 的互操作性以及强大的异常处理功能。 IronXL是一款经过实战检验的 CSV 解析器解决方案,可处理 CSV 和 Excel 格式,为大规模批量处理场景提供强大的性能。 本教程演示如何有效地使用 IronXL 作为 .NET Core CSV 读取器,并提供实用、易于理解的示例,以高效地解析 CSV 数据,包括异步操作以提高应用程序的响应速度。 开发者为开源 CSV 工具贡献改进或提交拉取请求时,也会发现 IronXL 清晰的 API 是一个有价值的参考,尤其是在管理包含重复值、重复条目或在数据导入过程中需要数据验证的数据集时。

在.NET生态系统中,有多个软件包可以处理 CSV 文件操作,包括 EPPlus、NPOI 和 OpenXML 等替代方案,但 IronXL 的多功能性使其成为开发人员的首选,他们希望超越简单的 CSV 读取,并在单个 CSV 库中享受 Excel 互操作性——特别是对于企业应用程序中的 ETL 操作和报表生成任务。 选择合适的解析器取决于您的具体需求,因此本指南将带您了解实际案例,以帮助您做出明智的决定。

如何使用.NET Core CSV 读取器IronXL及实际示例:图 1 - IronXL

为什么选择IronXL作为您的.NET Core CSV 读取器?

在选择.NET Core CSV 读取器时, IronXL相比传统的 CSV 解析库具有几个令人信服的优势。 IronXL与.NET Core 的现代架构集成,同时保持与.NET Framework项目的向后兼容性。 该解决方案消除了开发人员在使用 CSV 文件操作时面临的常见痛点,包括:

  • 自动检测国际字符集的编码
  • 无需手动配置即可智能识别分隔符
  • 对从千字节到千兆字节大小的文件进行内存高效处理
  • 内置数据类型推断和转换
  • 跨平台的回车和换行处理 即使处理 CSV 数据,也支持 Excel 公式。
  • 在 Windows、Linux 和 macOS 上的跨平台可靠性

与需要大量配置和手动解析逻辑的基本 CSV 读取器不同, IronXL可以自动处理特殊情况,例如包含分隔符的带引号的字段、多行单元格值和特殊字符。 该库的架构通过延迟加载和流式传输功能确保了最佳性能,使其既适用于小型配置文件,也适用于大规模数据处理任务。 IronXL可以根据需要跳过标题行,并高效地拆分复杂的数据结构。 了解更多信息,请参阅IronXL功能概述

对于从传统系统过渡到新系统的开发人员来说,IronXL 提供了一个熟悉的 API,降低了学习难度,同时为响应式应用程序提供了现代化的 async/await 模式。 这使其成为正在进行数据处理基础设施现代化改造的团队的理想选择。 有关 API 参考和配置选项,请参阅完整的IronXL文档

如何安装IronXL以读取 CSV 文件?

无论您是构建控制台应用程序、 ASP.NET Core Web 应用程序还是 Windows Forms 应用程序,在.NET Core项目中安装IronXL都只需几秒钟。 要在 .NET Core 中高效解析 CSV 文件并开始读取 CSV 数据,请在 Visual Studio 中打开程序包管理器控制台并运行:

Install-Package IronXl.Excel
Install-Package IronXl.Excel
SHELL

或使用 .NET CLI:

dotnet add package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

如何使用.NET Core CSV 读取器IronXL的实际示例:图 2 - 安装

或者,使用NuGet包管理器界面通过搜索"IronXl.Excel"并点击安装来安装。 该库在迁移到.NET Core期间与现有的.NET Framework项目集成。 您也可以直接从IronXL NuGet页面引用它。

安装完成后,将命名空间添加到您的代码中:

using IronXL;
using IronXL;
$vbLabelText   $csharpLabel

此设置使您能够访问强大的 CSV 读取功能,而无需 Microsoft Office 或 Interop 依赖项,使其成为云部署和 Docker 容器的理想选择。 有关详细的安装说明和配置设置,请查看IronXL安装指南文档。

如何使用 IronXL 的 LoadCSV 方法读取 CSV 文件?

IronXL 的LoadCSV 方法使 CSV 文件处理变得简单,它可以高效地处理 CSV 标题、CSV 列和 CSV 行,如下例所示:

// Load CSV file into a WorkBook object for .NET Core CSV reading
var workbook = WorkBook.LoadCSV("Budget.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
// Access the default worksheet containing parsed CSV data
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Read specific cell values with type-safe methods
string cellValue = worksheet["A1"].StringValue;
// Iterate through a range for bulk CSV data processing
foreach (var cell in worksheet["A1:C10"])
{
    Console.WriteLine($"Cell {cell.AddressString}: {cell.Text}");
}
// Load CSV file into a WorkBook object for .NET Core CSV reading
var workbook = WorkBook.LoadCSV("Budget.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
// Access the default worksheet containing parsed CSV data
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Read specific cell values with type-safe methods
string cellValue = worksheet["A1"].StringValue;
// Iterate through a range for bulk CSV data processing
foreach (var cell in worksheet["A1:C10"])
{
    Console.WriteLine($"Cell {cell.AddressString}: {cell.Text}");
}
$vbLabelText   $csharpLabel

LoadCSV 方法创建一个 WorkBook 对象,该对象使用优化的内存流处理在内存中表示您的 CSV 数据结构。 fileFormat 参数指定内部处理格式,而 listDelimiter 定义 CSV 文件中使用的 CSV 分隔符——支持制表符分隔的文件和管道符分隔的格式。

输入和输出

如何使用.NET Core CSV 读取器IronXL的实际示例:图 5 - CSV 输入示例

当处理从包含 sep= 行(有时称为"分隔符"标记)的系统导出的 CSV 文件时, IronXL会智能地读取此元数据,以自动确定正确的分隔符。 此功能可节省处理区域 CSV 格式的时间,这些格式可能使用分号、制表符或竖线而不是逗号,从而确保跨字符集的正确编码处理。

默认的 WorkSheet 属性可立即以工作表的形式访问已解析的 CSV 数据,从而实现逐单元格或基于范围的数据提取。 您可以使用 IntValueDecimalValue 等属性检索值,以实现具有内置类型转换的类型安全操作。 对于更复杂的数据操作和转换,请探索 IronXL 的单元格格式化选项和范围选择功能。

如何将 CSV 数据映射到带有数据验证的 C# 类?

您可以使用字段映射和数据验证功能,将 CSV 数据直接映射到 C# 对象。 例如,假设有一个 CSV 文件,其中包含姓名、年龄和城市三列。 定义一个带有属性映射的模型,如下所示:

public record Customer(string Name, int Age, string City)
{
    public bool IsValid() => !string.IsNullOrEmpty(Name) && Age > 0;
}

// Parse CSV rows into typed objects
var customers = new List<Customer>();
for (int row = 2; row <= worksheet.RowCount; row++)
{
    var customer = new Customer(
        Name: worksheet[$"A{row}"].StringValue,
        Age:  worksheet[$"B{row}"].IntValue,
        City: worksheet[$"C{row}"].StringValue
    );
    if (customer.IsValid())
        customers.Add(customer);
}
// Output the records
foreach (var record in customers)
{
    Console.WriteLine($"Customer: {record.Name}, Age: {record.Age}, City: {record.City}");
}
public record Customer(string Name, int Age, string City)
{
    public bool IsValid() => !string.IsNullOrEmpty(Name) && Age > 0;
}

// Parse CSV rows into typed objects
var customers = new List<Customer>();
for (int row = 2; row <= worksheet.RowCount; row++)
{
    var customer = new Customer(
        Name: worksheet[$"A{row}"].StringValue,
        Age:  worksheet[$"B{row}"].IntValue,
        City: worksheet[$"C{row}"].StringValue
    );
    if (customer.IsValid())
        customers.Add(customer);
}
// Output the records
foreach (var record in customers)
{
    Console.WriteLine($"Customer: {record.Name}, Age: {record.Age}, City: {record.City}");
}
$vbLabelText   $csharpLabel

使用IronXL,工作表中的每一行都映射到一个类型化对象,可以进行数据处理、序列化为 JSON 或导出为另一种格式,并进行适当的异常处理。 这种方法可以用最少的样板代码从 CSV 数据创建强类型记录。 如需更深入的了解,请参阅C# 中读取 CSV 文件的指南。

如何处理不同的分隔符并将其转换为数据表?

现实世界中的 CSV 文件格式通常使用逗号以外的各种分隔符,需要灵活处理。 IronXL通过自动分隔符检测巧妙地解决了这个问题:

// Load CSV with semicolon delimiter
WorkBook workbook = WorkBook.LoadCSV("products.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ";");
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert to DataTable for database operations
DataTable dataTable = worksheet.ToDataTable(true);
// Process the DataTable
foreach (DataRow row in dataTable.Rows)
{
    Console.WriteLine($"Product: {row["ProductName"]}, Price: {row["Price"]}");
}
// Load CSV with semicolon delimiter
WorkBook workbook = WorkBook.LoadCSV("products.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ";");
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Convert to DataTable for database operations
DataTable dataTable = worksheet.ToDataTable(true);
// Process the DataTable
foreach (DataRow row in dataTable.Rows)
{
    Console.WriteLine($"Product: {row["ProductName"]}, Price: {row["Price"]}");
}
$vbLabelText   $csharpLabel

ToDataTable 方法将工作表数据转换为.NET DataTable,布尔参数指示是否使用第一行作为列标题。 这种转换对于数据库操作、 ASP.NET Core应用程序中的数据绑定,或者当您需要应用现有的 DataTable 处理逻辑进行 SQL Server 集成时,尤其有用。 生成的 DataTable 保留数据类型和模式信息,可以直接与 SqlBulkCopy 一起使用,以进行高效的批量插入操作。

请参阅详细指南,了解有关将 CSV 文件导入 DataTable以及数据库集成的更多信息。

如何将数据表导出回 CSV 文件?

DataTable 中处理完数据后,通常需要将结果写回 CSV 文件。IronXL 也支持这种双向IronXL:

// Load a DataTable from your data source
DataTable exportTable = GetProcessedData(); // your data source method

// Create a new workbook and populate it from the DataTable
WorkBook outputWorkbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet outputSheet = outputWorkbook.DefaultWorkSheet;

// Write headers from DataTable columns
for (int col = 0; col < exportTable.Columns.Count; col++)
{
    outputSheet[0, col].Value = exportTable.Columns[col].ColumnName;
}

// Write rows
for (int row = 0; row < exportTable.Rows.Count; row++)
{
    for (int col = 0; col < exportTable.Columns.Count; col++)
    {
        outputSheet[row + 1, col].Value = exportTable.Rows[row][col]?.ToString();
    }
}

// Save as CSV
outputWorkbook.SaveAsCsv("output.csv", delimiter: ",");
Console.WriteLine("Export complete.");
// Load a DataTable from your data source
DataTable exportTable = GetProcessedData(); // your data source method

// Create a new workbook and populate it from the DataTable
WorkBook outputWorkbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet outputSheet = outputWorkbook.DefaultWorkSheet;

// Write headers from DataTable columns
for (int col = 0; col < exportTable.Columns.Count; col++)
{
    outputSheet[0, col].Value = exportTable.Columns[col].ColumnName;
}

// Write rows
for (int row = 0; row < exportTable.Rows.Count; row++)
{
    for (int col = 0; col < exportTable.Columns.Count; col++)
    {
        outputSheet[row + 1, col].Value = exportTable.Rows[row][col]?.ToString();
    }
}

// Save as CSV
outputWorkbook.SaveAsCsv("output.csv", delimiter: ",");
Console.WriteLine("Export complete.");
$vbLabelText   $csharpLabel

这种模式非常适用于 ETL 管道,其中数据会被加载、转换,然后写入新文件。有关其他导出格式,请参阅C# 导出到 CSV 教程DataTable 导出到 Excel 指南

如何进行CSV和Excel格式之间的转换?

IronXL 的一个突出特点是 CSV 到 Excel 的转换和 Excel 到 CSV 的转换,这对于数据迁移项目至关重要。 以下示例演示了此功能:

// Load CSV and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("report.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
// Save as Excel file
csvWorkbook.SaveAs("report.xlsx");
// Or load Excel and export to CSV
WorkBook excelWorkbook = WorkBook.Load("data.xlsx");
excelWorkbook.SaveAsCsv("exported_data.csv", delimiter: ",");
// Load CSV and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("report.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
// Save as Excel file
csvWorkbook.SaveAs("report.xlsx");
// Or load Excel and export to CSV
WorkBook excelWorkbook = WorkBook.Load("data.xlsx");
excelWorkbook.SaveAsCsv("exported_data.csv", delimiter: ",");
$vbLabelText   $csharpLabel

这种双向转换既能保持数据完整性,又能为各种文件转换场景提供格式灵活性。 SaveAs 方法会自动从文件扩展名检测所需的格式,支持 XLSX、XLS 和其他 Excel 格式以及工作表管理。 使用 SaveAsCsv 保存为 CSV 时,您可以指定自定义分隔符和文本编码以满足您的要求。

当与需要特定文件格式进行数据交换的系统集成时,此功能非常宝贵。 对于从其他库迁移或评估手动解析替代方案的开发人员,请参阅Stack Overflow 上讨论的 IronXL 与流行的替代方案的比较,以及.NET 社区中的性能考虑因素。 有关更多文件格式转换模式,请访问Excel 电子表格转换指南

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

处理大型 CSV 文件(包含数百万行数据)需要谨慎管理内存。 IronXL内部采用延迟加载,这意味着工作表行是按需读取的,而不是一次性全部读取。 为了在处理大型数据集时保持较低的内存使用量,请分批处理行:

WorkBook workbook = WorkBook.LoadCSV("large-dataset.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
WorkSheet worksheet = workbook.DefaultWorkSheet;

int batchSize = 1000;
int totalRows = worksheet.RowCount;

for (int start = 1; start <= totalRows; start += batchSize)
{
    int end = Math.Min(start + batchSize - 1, totalRows);
    for (int row = start; row <= end; row++)
    {
        string id   = worksheet[$"A{row}"].StringValue;
        string name = worksheet[$"B{row}"].StringValue;
        // Process each record here
        Console.WriteLine($"Row {row}: {id} - {name}");
    }
    Console.WriteLine($"Processed batch {start}-{end}");
}
WorkBook workbook = WorkBook.LoadCSV("large-dataset.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
WorkSheet worksheet = workbook.DefaultWorkSheet;

int batchSize = 1000;
int totalRows = worksheet.RowCount;

for (int start = 1; start <= totalRows; start += batchSize)
{
    int end = Math.Min(start + batchSize - 1, totalRows);
    for (int row = start; row <= end; row++)
    {
        string id   = worksheet[$"A{row}"].StringValue;
        string name = worksheet[$"B{row}"].StringValue;
        // Process each record here
        Console.WriteLine($"Row {row}: {id} - {name}");
    }
    Console.WriteLine($"Processed batch {start}-{end}");
}
$vbLabelText   $csharpLabel

该技术可使堆分配保持可预测性,并避免在大数据集上出现内存不足错误。 导出时也适用同样的模式——逐步写入行,最后保存一次。 更多提示,请参阅文件大小限制指南

IronXL 为企业级 CSV 处理提供了哪些高级功能?

IronXL提供企业级功能,使其区别于基本的 CSV 解析器,包括单元测试支持和调试工具。 该库提供跨平台兼容性,可在 Windows、Linux、macOS 和 Docker 容器中运行——这对于现代.NET Core部署和微服务架构至关重要。 根据微软的文档,跨平台支持对于云原生应用程序和 Azure 部署至关重要。

除了技术能力之外,IronXL 的所有许可证均包含专业支持和定期更新,确保与最新的 .NET 版本和安全补丁兼容。 这种商业支持确保了关键任务应用程序的可靠性,而开源库在生产环境中可能无法满足这些需求。 该库通过优化的内存管理高效处理大型数据集,并支持以下高级场景:

IronXL高级功能概述
特征 说明 用例
公式计算 导入后对 CSV 数据进行 Excel 公式评估 财务报告、汇总
保留单元格格式 转换过程中保留数字格式和日期样式 会计导出,日期敏感数据
多工作表工作簿操作 将多个 CSV 文件合并到一个工作簿中,并命名工作表。 月度报告汇总
数据聚合 跨范围求和、平均值、计数 仪表盘生成,KPI计算
范围排序 按一列或多列对行进行排序 按排名输出,按字母顺序输出

对于需要可扩展性和负载均衡的生产部署,IronXL 的许可模式提供了灵活性,可选择单个项目、团队和企业级使用——所有这些都包括源代码访问权限和免版税再分发权。 购买许可证即可解锁全部功能,且无水印。

如何使用.NET Core CSV 读取器IronXL的实际示例:图 10 - 许可

如何应用许可证密钥?

购买后,请在调用任何IronXL方法之前应用您的许可证密钥:

// Apply license key at application startup
IronXl.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

// Then proceed with CSV reading as normal
WorkBook workbook = WorkBook.LoadCSV("data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
WorkSheet worksheet = workbook.DefaultWorkSheet;
Console.WriteLine($"Loaded {worksheet.RowCount} rows from CSV.");
// Apply license key at application startup
IronXl.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

// Then proceed with CSV reading as normal
WorkBook workbook = WorkBook.LoadCSV("data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");
WorkSheet worksheet = workbook.DefaultWorkSheet;
Console.WriteLine($"Loaded {worksheet.RowCount} rows from CSV.");
$vbLabelText   $csharpLabel

将许可证密钥分配放在应用程序的最早入口点(通常是顶级语句项目中的 Program.cs),以确保所有后续调用都已获得完全许可。 有关分步说明,请参阅IronXL许可证密钥指南

如何开始免费试用?

IronXL 简化了 .NET Core 应用程序中的 CSV 读取和写入操作,同时提供了处理复杂场景的灵活性,包括数据分析、报告和自动化任务。 它直观的 API,结合 Excel 格式支持和企业级功能,使其成为需要成熟的 CSV 处理能力、线程安全性和并发访问支持的开发人员的可靠选择。 该库能够转换格式、处理各种分隔符、执行数据清理,并与现有的.NET数据结构集成,从而显著缩短开发时间,同时保持代码的可维护性。

准备好开始处理 CSV 文件了吗? 立即下载IronXL免费试用版,体验该库如何通过专业级的 CSV 解析功能改变您的数据处理工作流程。 对于生产环境,请探索包含专业支持、文档和持续更新的.NET项目许可选项。

更多延伸阅读资源:

常见问题解答

为什么 IronXL 是 .NET Core 中处理 CSV 文件的理想选择?

IronXL 可无缝处理 CSV 和 Excel 格式,具有强大的异常处理能力和卓越的性能优化,尤其适用于大规模批量处理场景。

IronXL在读取CSV文件时如何提高性能?

IronXL 针对大规模批量处理进行了优化,能够流畅地处理不同的分隔符和数据类型转换,从而确保高效的 CSV 文件操作。

IronXL 能否处理 CSV 文件中不同的分隔符?

是的,IronXL 可以高效处理带有各种分隔符的 CSV 文件,使其能够灵活地应用于不同的数据导入和导出场景。

IronXL 是否支持 CSV 处理的异步操作?

IronXL 支持异步操作,通过允许非阻塞操作来增强 CSV 解析期间的应用程序响应能力。

IronXL 如何帮助为开源 CSV 工具做出贡献的开发者?

IronXL 提供了一个清晰的 API,对于开发人员来说是一个有价值的参考,尤其是在处理包含重复值、重复条目或需要数据验证的数据集时。

与其他 CSV 解析库相比,使用 IronXL 有哪些优势?

IronXL 的优势在于其与 Excel 的互操作性、强大的异常处理能力和增强的性能,使其成为比 CsvHelper 和 TextFieldParser 等库更全面的解决方案。

IronXL 能否用于 CSV 导入过程中的数据验证?

是的,IronXL 的功能包括数据验证,这在数据导入过程中管理具有重复条目或重复值的数据集时特别有用。

IronXL 与 .NET Core 应用程序兼容吗?

当然,IronXL 旨在与 .NET Core 应用程序无缝集成,为 CSV 读取和处理提供可靠的解决方案。

Curtis Chau
技术作家

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

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

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me