跳至页脚内容
使用 IRONXL

如何在.NET中使用IronXL写入 CSV 文件

为什么 .NET 开发人员需要更好的 CSV 解决方案?

CSV 文件为无数.NET应用程序提供数据交换支持——但当需要处理实际应用中的复杂情况时,标准库选项往往力不从心。从财务报告到库存系统,您只需几行代码即可通过编程方式创建 CSV 文件。 虽然像CsvHelper这样的库涵盖了基本的 CSV 操作,但现代开发人员面临着复杂的场景:转换带有公式的 Excel 工作簿、在导出过程中保留数据类型以及处理企业级电子表格工作流程。 IronXL通过将可靠的 CSV 写入功能与完整的Excel 功能结合在一个遵循RFC 4180 标准的、无依赖项的库中,解决了这些挑战。

这使其成为构建支持多列、行特定处理逻辑和自动推断分隔符的自定义.NET CSV 写入器或.NET CSV 解析器的开发人员的理想选择。 本教程将带您了解 IronXL 的 CSV 功能——从基本的文件创建到企业级数据导出。

如何安装和设置IronXL?

通过NuGet包管理器安装IronXL只需几秒钟。 您可以使用程序包管理器控制台或.NET CLI:

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

安装完成后,添加IronXL命名空间,即可立即开始写入 CSV 文件。 以下示例展示了如何在.NET 10 中使用顶级语句创建工作簿、填充数据并将其导出为 CSV 文件:

using IronXL;

// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("data");

// Add headers
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Quantity";
workSheet["C1"].Value = "Price";

// Add data rows
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 100;
workSheet["C2"].Value = 19.99;

workSheet["A3"].Value = "Gadget";
workSheet["B3"].Value = 250;
workSheet["C3"].Value = 34.50;

workSheet["A4"].Value = "Component";
workSheet["B4"].Value = 75;
workSheet["C4"].Value = 8.99;

// Save as CSV with comma delimiter
workBook.SaveAsCsv("inventory.csv", ",");
using IronXL;

// Create a new workbook and worksheet
WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("data");

// Add headers
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Quantity";
workSheet["C1"].Value = "Price";

// Add data rows
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 100;
workSheet["C2"].Value = 19.99;

workSheet["A3"].Value = "Gadget";
workSheet["B3"].Value = 250;
workSheet["C3"].Value = 34.50;

workSheet["A4"].Value = "Component";
workSheet["B4"].Value = 75;
workSheet["C4"].Value = 8.99;

// Save as CSV with comma delimiter
workBook.SaveAsCsv("inventory.csv", ",");
$vbLabelText   $csharpLabel

这个简单的程序演示了如何直接从 C# 代码写入 CSV 内容,创建一个用于保存数据的WorkBook 对象SaveAsCsv 方法默认使用逗号作为分隔符,但允许您指定任何分隔符——这对于特定于区域设置的情况非常有用,在这些情况下,分号或制表符是标准的列分隔符。

理解工作簿和工作表模型

IronXL通过工作簿到工作表的层次结构来组织数据。 WorkBook充当一个或多个WorkSheet对象的容器,每个 WorkSheet 对象代表一个单元格网格。 当您导出为 CSV 时, IronXL会为每个工作表创建一个文件,并以 filename.SheetName.csv 的模式命名。

无论您是从头开始创建新文件、加载现有的Excel 工作簿,还是从数据库导出数据,此模型都能为您提供一致的 API。 您可以使用标准 Excel 表示法(B2)或从零开始的行和列整数来引用单元格,具体取决于您的工作流程。

如何使用自定义分隔符编写 CSV 文件?

不同地区和系统对列分隔符的要求不同。 欧洲地区经常使用分号,因为小数中会出现逗号。 制表符分隔值 (TSV) 在生物信息学和日志处理流程中很常见。 IronXL 的 SaveAsCsv 方法接受任何字符串作为分隔符:

using IronXL;

WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("sales");

workSheet["A1"].Value = "Region";
workSheet["B1"].Value = "Revenue";
workSheet["C1"].Value = "Units";

workSheet["A2"].Value = "Europe";
workSheet["B2"].Value = "1250000.50";
workSheet["C2"].Value = 3400;

workSheet["A3"].Value = "无rth America";
workSheet["B3"].Value = "2800000.00";
workSheet["C3"].Value = 7200;

// Semicolon delimiter for European locales
workBook.SaveAsCsv("sales_europe.csv", ";");

// Tab delimiter for TSV output
workBook.SaveAsCsv("sales_tsv.tsv", "\t");
using IronXL;

WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("sales");

workSheet["A1"].Value = "Region";
workSheet["B1"].Value = "Revenue";
workSheet["C1"].Value = "Units";

workSheet["A2"].Value = "Europe";
workSheet["B2"].Value = "1250000.50";
workSheet["C2"].Value = 3400;

workSheet["A3"].Value = "无rth America";
workSheet["B3"].Value = "2800000.00";
workSheet["C3"].Value = 7200;

// Semicolon delimiter for European locales
workBook.SaveAsCsv("sales_europe.csv", ";");

// Tab delimiter for TSV output
workBook.SaveAsCsv("sales_tsv.tsv", "\t");
$vbLabelText   $csharpLabel

分隔符字符串直接放入分隔符字符槽中,无需任何额外的解析配置。 IronXL会处理包含分隔符字符的单元格的引用,确保输出符合RFC 4180

如何将Excel工作簿转换为CSV格式?

如何使用IronXL创建.NET CSV 写入器:图 1 - 使用IronXL的 CSV 输出示例

IronXL擅长将现有的Excel 文件转换为 CSV 文件,评估公式,并保持数据完整性。 当处理包含标题行和动态计算值的电子表格时,这一点至关重要。

using IronXL;

// Load an Excel file with formulas and formatting
WorkBook workBook = WorkBook.Load("financial_report.xlsx");

// Evaluate all formulas before export so calculated values appear in CSV
workBook.EvaluateAll();

// Export to CSV -- each worksheet creates a separate CSV file
// Creates: report.Sheet1.csv, report.Sheet2.csv, etc.
workBook.SaveAsCsv("report.csv", ",");
using IronXL;

// Load an Excel file with formulas and formatting
WorkBook workBook = WorkBook.Load("financial_report.xlsx");

// Evaluate all formulas before export so calculated values appear in CSV
workBook.EvaluateAll();

// Export to CSV -- each worksheet creates a separate CSV file
// Creates: report.Sheet1.csv, report.Sheet2.csv, etc.
workBook.SaveAsCsv("report.csv", ",");
$vbLabelText   $csharpLabel

转换多工作表工作簿时,IronXL 会自动为每个工作表生成单独的 CSV 文件。 公式计算在导出前执行,确保最终 CSV 输出的数据准确无误。 EvaluateAll 方法会在文件写入磁盘之前解析所有公式,包括跨工作表引用。

输出

首先,您可以在这里看到由多工作表 Excel 文件生成的 CSV 文件:

如何使用IronXL创建.NET CSV 写入器:图 2 - CSV 文件

以下是一个Excel表格与对应CSV文件的对比示例:

如何使用IronXL创建.NET CSV 写入器:图 3 - 示例输出

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

对于数据库驱动型应用程序, IronXL使数据表导出变得简单。 以下示例从模拟数据源读取 DataTable 并将其写入 CSV 文件,使用分号作为分隔符:

using System.Data;
using IronXL;

// Simulate a DataTable from a database query
DataTable dataTable = GetSalesData();

WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("sales");

// Write column headers from DataTable schema
for (int col = 0; col < dataTable.Columns.Count; col++)
{
    workSheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName);
}

// Write data rows
int row = 1;
foreach (DataRow dataRow in dataTable.Rows)
{
    for (int col = 0; col < dataTable.Columns.Count; col++)
    {
        workSheet.SetCellValue(row, col, dataRow[col]?.ToString() ?? string.Empty);
    }
    row++;
}

// Export with semicolon delimiter for European compatibility
workBook.SaveAsCsv("sales_data.csv", ";");
using System.Data;
using IronXL;

// Simulate a DataTable from a database query
DataTable dataTable = GetSalesData();

WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("sales");

// Write column headers from DataTable schema
for (int col = 0; col < dataTable.Columns.Count; col++)
{
    workSheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName);
}

// Write data rows
int row = 1;
foreach (DataRow dataRow in dataTable.Rows)
{
    for (int col = 0; col < dataTable.Columns.Count; col++)
    {
        workSheet.SetCellValue(row, col, dataRow[col]?.ToString() ?? string.Empty);
    }
    row++;
}

// Export with semicolon delimiter for European compatibility
workBook.SaveAsCsv("sales_data.csv", ";");
$vbLabelText   $csharpLabel

DataTable 导入时,dataTable.Rows 集合中的每一行都会成为工作表中的新行。 IronXL在转换过程中保留数据类型——数字保持数值形式,日期保持格式,文本无需额外配置即可处理特殊字符。

输出

在这里,您可以看到输出 CSV 文件旁边的模拟数据源:

如何使用IronXL创建.NET CSV 写入器:图 4 - 将数据表导出为 CSV 输出

立即开始使用 IronXL。
green arrow pointer

IronXL与 CsvHelper 在写入 CSV 文件方面有何不同?

考虑以下员工数据导出场景,该场景演示了使用这两个库的 CSV 写入工作流程。

CsvHelper 实现:

using System.Globalization;
using System.IO;
using CsvHelper;

using var writer = new StreamWriter("employees.csv");
using var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
csv.WriteRecords(employees);
using System.Globalization;
using System.IO;
using CsvHelper;

using var writer = new StreamWriter("employees.csv");
using var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
csv.WriteRecords(employees);
$vbLabelText   $csharpLabel

IronXL实施:

using IronXL;

WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("employees");

int rowIndex = 1;
foreach (var emp in employees)
{
    workSheet[$"A{rowIndex}"].Value = emp.Name;
    workSheet[$"B{rowIndex}"].Value = emp.Salary;
    workSheet[$"C{rowIndex}"].Value = emp.StartDate;
    rowIndex++;
}

workBook.SaveAsCsv("employees.csv", ",");
using IronXL;

WorkBook workBook = WorkBook.Create();
WorkSheet workSheet = workBook.CreateWorkSheet("employees");

int rowIndex = 1;
foreach (var emp in employees)
{
    workSheet[$"A{rowIndex}"].Value = emp.Name;
    workSheet[$"B{rowIndex}"].Value = emp.Salary;
    workSheet[$"C{rowIndex}"].Value = emp.StartDate;
    rowIndex++;
}

workBook.SaveAsCsv("employees.csv", ",");
$vbLabelText   $csharpLabel
IronXL与 CsvHelper 功能对比
特征 CsvHelper IronXL
基本的 CSV 编写
Excel 转 CSV 转换
公式评估
多页处理
数据类型保留 手册 自动翻译
Excel格式支持(XLSX、XLS、XLSM)
无需微软办公软件
单元格格式和样式
跨平台(支持.NET 10)

CsvHelper 可以高效地处理 POCO 对象的简单序列化。 IronXL在您需要加载现有 Excel 文件、在导出前评估公式或以精细控制管理工作表范围时,提供了额外的功能。 如果您的工作流程涉及从业务用户接收 .xlsx 文件并将其转换为 CSV 以供下游系统使用, IronXL将从您的管道中移除整个转换步骤。

IronXL为 CSV 导出提供了哪些企业级功能?

IronXL 的 SaveAsCsv 方法具备多项可用于生产环境的功能:

IronXL CSV 导出企业版功能
特征 说明 用例
自定义分隔符 逗号、分号、制表符或任何字符 区域设置兼容性
编码选项 UTF-8、UTF-16 和自定义编码 国际字符集
公式评估 导出前计算 Excel 公式 财务报告、动态数据
跨平台支持 Windows、Linux、macOS 云和容器部署
多页导出 每个工作表一个 CSV 文件 复杂的工作簿结构
RFC 4180 合规性 特殊字符自动加引号 保证互操作性

您可以在导出之前应用单元格数据格式,以控制数字、货币和日期在 CSV 输出中的显示方式。 对于大型数据集,使用工作表区域操作分块处理数据,以保持内存使用量可预测。

跨平台支持意味着您可以将 IronXL 支持的 CSV 生成功能部署到 Kubernetes 或 Azure 应用服务中的 Linux 容器,而无需对代码进行任何更改。 该库不包含任何非托管依赖项,因此在各种操作系统上都能完全运行。 有关支持的运行时的完整详细信息,请参阅IronXL平台兼容性指南

如何处理常见的CSV导出问题?

大规模处理 CSV 导出文件时,会出现一些可预见的问题。以下是解决每个问题的方法:

数据中的特殊字符: IronXL会自动转义单元格值中的引号、逗号和换行符。 您无需预处理字符串或编写自定义转义逻辑——该库内部会处理 RFC 4180 引用规则。

大文件处理:对于包含数万行数据的工作簿,请使用工作表区域分批处理数据。 在最终导出之前写入中间工作表,可以让你控制内存分配。

编码问题:在单元格值中处理国际字符、亚洲文字或表情符号时,请明确指定 UTF-8 编码。 IronXL开箱即用,支持 UTF-8 和 UTF-16 编码,因此不需要第三方编码库。

缺失或输入错误的数据: IronXL默认保留数字和日期格式。 当单元格包含引用缺失数据的公式时,EvaluateAll() 将解析为错误值,而不是静默地输出空白文本,从而在管道早期就发现数据质量问题。

分隔符冲突:如果您的数据包含分隔符字符(例如,价格字段包含 $1,200.00,而使用逗号作为分隔符), IronXL会根据 RFC 4180 规则自动将值用双引号括起来。

有关详细指导,请访问IronXL CSV 文档API 参考支持资源

如何使用IronXL读取和解析 CSV 文件?

CSV 写入只是故事的一半。 IronXL还支持CSV 读取和解析,将逗号分隔的数据加载到工作簿结构中,您可以对其进行查询、筛选和转换,然后再导出为任何格式。

using IronXL;

// Load an existing CSV file into a workbook
WorkBook workBook = WorkBook.Load("sales_data.csv");
WorkSheet workSheet = workBook.DefaultWorkSheet;

// Iterate over rows and process data
foreach (var row in workSheet.Rows)
{
    string product = row["A"].ToString();
    int quantity = row["B"].IntValue;
    decimal price = (decimal)row["C"].DoubleValue;

    Console.WriteLine($"Product: {product}, Qty: {quantity}, Price: {price:C}");
}

// Apply a filter and re-export to a new CSV
workBook.SaveAsCsv("filtered_output.csv", ",");
using IronXL;

// Load an existing CSV file into a workbook
WorkBook workBook = WorkBook.Load("sales_data.csv");
WorkSheet workSheet = workBook.DefaultWorkSheet;

// Iterate over rows and process data
foreach (var row in workSheet.Rows)
{
    string product = row["A"].ToString();
    int quantity = row["B"].IntValue;
    decimal price = (decimal)row["C"].DoubleValue;

    Console.WriteLine($"Product: {product}, Qty: {quantity}, Price: {price:C}");
}

// Apply a filter and re-export to a new CSV
workBook.SaveAsCsv("filtered_output.csv", ",");
$vbLabelText   $csharpLabel

通过IronXL加载 CSV 文件,您可以访问完整的表格 API ,包括排序、筛选和公式计算。 您还可以使用SaveAs将加载的数据保存为 Excel 文件,只需一次方法调用即可将 CSV 转换为 XLSX——这是构建报表生成服务时的常见要求。

导出前如何验证 CSV 数据?

导出前进行数据验证可防止下游管道故障。 IronXL可让您直接访问单元格值和类型,因此您可以在写入之前检查空值、强制执行数值范围并拒绝格式错误的日期:

using IronXL;

WorkBook workBook = WorkBook.Load("input.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;

var errors = new List<string>();

for (int rowIdx = 1; rowIdx <= workSheet.RowCount; rowIdx++)
{
    string productName = workSheet[$"A{rowIdx}"].StringValue;
    double price = workSheet[$"C{rowIdx}"].DoubleValue;

    if (string.IsNullOrWhiteSpace(productName))
        errors.Add($"Row {rowIdx}: Product name is empty.");

    if (price <= 0)
        errors.Add($"Row {rowIdx}: Price must be greater than zero (found {price}).");
}

if (errors.Count == 0)
{
    workBook.SaveAsCsv("validated_output.csv", ",");
    Console.WriteLine("Export complete.");
}
else
{
    foreach (var error in errors)
        Console.WriteLine(error);
}
using IronXL;

WorkBook workBook = WorkBook.Load("input.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;

var errors = new List<string>();

for (int rowIdx = 1; rowIdx <= workSheet.RowCount; rowIdx++)
{
    string productName = workSheet[$"A{rowIdx}"].StringValue;
    double price = workSheet[$"C{rowIdx}"].DoubleValue;

    if (string.IsNullOrWhiteSpace(productName))
        errors.Add($"Row {rowIdx}: Product name is empty.");

    if (price <= 0)
        errors.Add($"Row {rowIdx}: Price must be greater than zero (found {price}).");
}

if (errors.Count == 0)
{
    workBook.SaveAsCsv("validated_output.csv", ",");
    Console.WriteLine("Export complete.");
}
else
{
    foreach (var error in errors)
        Console.WriteLine(error);
}
$vbLabelText   $csharpLabel

这种模式在 ETL 管道中尤其有价值,因为应该拒绝错误行(并记录错误行),而不是默默导出。 IronXL 的 RangeRowCell 对象上的单元格数据访问方法返回强类型值,从而降低了静默类型强制转换错误的风险。

如何开始使用IronXL进行 CSV 写入?

IronXL将 CSV 写入从解析难题转变为直接操作。 它将 CSV 功能与 Excel 工作簿支持、公式计算和自动类型处理相结合,消除了管理多个库或手动数据转换的复杂性。

免费试用版让您在开发过程中无需许可证密钥即可完全访问所有功能,包括多工作表导出、公式评估和跨平台部署。 当您准备投入生产环境时,许可级别从涵盖商业用途的单一开发者级别开始。

入门所需关键资源:

准备好构建可用于生产环境的 CSV 工作流了吗? 立即开始免费试用,五分钟内即可完成首次 CSV 导出。

常见问题解答

IronXL用于什么?

IronXL是一个专为处理Excel文件而设计的.NET库,允许开发人员创建、读取和修改Excel文档,并将其导出为如CSV等各种格式,同时保持数据类型和管理复杂电子表格场景。

IronXL如何帮助在.NET中进行CSV写入?

IronXL提供将Excel工作簿导出为CSV格式的功能,确保数据类型得以保留,并有效处理复杂的电子表格场景,使其成为.NET开发人员需要强大CSV写入解决方案的理想选择。

为什么开发人员应该考虑使用IronXL进行CSV操作?

开发人员应考虑使用IronXL,其能够无缝地将Excel文件导出为CSV,处理大型数据集,并保持数据类型的完整性,提供了对于CSV操作.NET应用程序的优越解决方案。

使用IronXL进行电子表格管理的好处是什么?

使用IronXL进行电子表格管理的好处包括轻松操作Excel文档,支持如CSV等各种导出格式,以及在.NET应用程序中有效处理复杂数据结构和大型数据集的能力。

IronXL能否在导出为CSV时处理大型Excel文件?

是的,IronXL设计用于高效处理大型Excel文件,使开发人员能够在不影响性能或数据完整性的情况下导出大量数据到CSV。

IronXL如何在导出为CSV时确保数据类型保留?

IronXL通过准确将Excel数据转换为CSV格式,同时保持原始数据类型和结构,确保数据类型保留,这对于需要精确数据处理的应用程序至关重要。

IronXL适合复杂的电子表格场景吗?

IronXL非常适合复杂的电子表格场景,提供高级功能以管理和操作复杂的Excel文档,确保可以准确地将数据导出到CSV或其他格式。

Curtis Chau
技术作家

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

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

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我