如何在.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只需几秒钟。 您可以使用包管理器控制台(Package Manager Console)或 .NET CLI:
安装完成后,添加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", ",");Imports IronXL
' Create a new workbook and worksheet
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As 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.5
workSheet("A4").Value = "Component"
workSheet("B4").Value = 75
workSheet("C4").Value = 8.99
' Save as CSV with comma delimiter
workBook.SaveAsCsv("inventory.csv", ",")Imports IronXL
' Create a new workbook and worksheet
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As 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.5
workSheet("A4").Value = "Component"
workSheet("B4").Value = 75
workSheet("C4").Value = 8.99
' Save as CSV with comma delimiter
workBook.SaveAsCsv("inventory.csv", ",")这个简单的程序演示了如何直接从 C# 代码写入 CSV 内容,创建一个用于保存数据的WorkBook 对象。 SaveAsCsv 方法默认使用逗号作为分隔符,但允许您指定任何分隔符——这对于特定于区域设置的情况非常有用,在这些情况下,分号或制表符是标准的列分隔符。
理解工作簿和工作表模型
IronXL通过工作簿到工作表的层次结构来组织数据。 WorkBook充当一个或多个WorkSheet对象的容器,每个 WorkSheet 对象代表一个单元格网格。 当您导出为CSV时,IronXL为每个工作表创建一个文件,并使用模式filename.SheetName.csv命名它们。
模型为您提供一致的API,无论您是从头创建新文件、加载现有Excel工作簿,还是从数据库导出数据。 您可以使用标准的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");Imports IronXL
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As 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", vbTab)Imports IronXL
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As 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", vbTab)分隔符字符串直接放入分隔符字符槽中,无需任何额外的解析配置。 IronXL会处理包含分隔符字符的单元格的引用,确保输出符合RFC 4180 。
如何将Excel工作簿转换为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", ",");Imports IronXL
' Load an Excel file with formulas and formatting
Dim workBook As 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", ",")Imports IronXL
' Load an Excel file with formulas and formatting
Dim workBook As 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", ",")转换多工作表工作簿时,IronXL 会自动为每个工作表生成单独的 CSV 文件。 公式计算在导出前执行,确保最终 CSV 输出的数据准确无误。 EvaluateAll 方法会在文件写入磁盘之前解析所有公式,包括跨工作表引用。
输出
首先,您可以在这里看到由多工作表 Excel 文件生成的 CSV 文件:

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

如何将数据表导出为 CSV 文件?
对于以数据库为驱动的应用程序,IronXL使DataTable导出变得简单。 以下示例从模拟数据源读取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", ";");Imports System.Data
Imports IronXL
' Simulate a DataTable from a database query
Dim dataTable As DataTable = GetSalesData()
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("sales")
' Write column headers from DataTable schema
For col As Integer = 0 To dataTable.Columns.Count - 1
workSheet.SetCellValue(0, col, dataTable.Columns(col).ColumnName)
Next
' Write data rows
Dim row As Integer = 1
For Each dataRow As DataRow In dataTable.Rows
For col As Integer = 0 To dataTable.Columns.Count - 1
workSheet.SetCellValue(row, col, If(dataRow(col)?.ToString(), String.Empty))
Next
row += 1
Next
' Export with semicolon delimiter for European compatibility
workBook.SaveAsCsv("sales_data.csv", ";")Imports System.Data
Imports IronXL
' Simulate a DataTable from a database query
Dim dataTable As DataTable = GetSalesData()
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("sales")
' Write column headers from DataTable schema
For col As Integer = 0 To dataTable.Columns.Count - 1
workSheet.SetCellValue(0, col, dataTable.Columns(col).ColumnName)
Next
' Write data rows
Dim row As Integer = 1
For Each dataRow As DataRow In dataTable.Rows
For col As Integer = 0 To dataTable.Columns.Count - 1
workSheet.SetCellValue(row, col, If(dataRow(col)?.ToString(), String.Empty))
Next
row += 1
Next
' Export with semicolon delimiter for European compatibility
workBook.SaveAsCsv("sales_data.csv", ";")从dataTable.Rows集合中的每一行都会成为工作表中的新行。 IronXL在转换过程中保留数据类型——数字保持数值状态,日期保持其格式,文本可以处理特殊字符无需额外配置。
输出
在这里,您可以看到输出 CSV 文件旁边的模拟数据源:

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);Imports System.Globalization
Imports System.IO
Imports CsvHelper
Using writer As New StreamWriter("employees.csv")
Using csv As New CsvWriter(writer, CultureInfo.InvariantCulture)
csv.WriteRecords(employees)
End Using
End UsingImports System.Globalization
Imports System.IO
Imports CsvHelper
Using writer As New StreamWriter("employees.csv")
Using csv As New CsvWriter(writer, CultureInfo.InvariantCulture)
csv.WriteRecords(employees)
End Using
End UsingIronXL实施:
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", ",");Imports IronXL
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("employees")
Dim rowIndex As Integer = 1
For Each emp In employees
workSheet($"A{rowIndex}").Value = emp.Name
workSheet($"B{rowIndex}").Value = emp.Salary
workSheet($"C{rowIndex}").Value = emp.StartDate
rowIndex += 1
Next
workBook.SaveAsCsv("employees.csv", ",")Imports IronXL
Dim workBook As WorkBook = WorkBook.Create()
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("employees")
Dim rowIndex As Integer = 1
For Each emp In employees
workSheet($"A{rowIndex}").Value = emp.Name
workSheet($"B{rowIndex}").Value = emp.Salary
workSheet($"C{rowIndex}").Value = emp.StartDate
rowIndex += 1
Next
workBook.SaveAsCsv("employees.csv", ",")| 特征 | CsvHelper | IronXL |
|---|---|---|
| 基本的 CSV 编写 | 是 | 是 |
| Excel 转 CSV 转换 | 无 | 是 |
| 公式评估 | 无 | 是 |
| 多页处理 | 无 | 是 |
| 数据类型保留 | 手册 | 自动翻译 |
| Excel格式支持(XLSX、XLS、XLSM) | 无 | 是 |
| 无需微软办公软件 | 是 | 是 |
| 单元格格式和样式 | 无 | 是 |
| 跨平台(支持.NET 10) | 是 | 是 |
CsvHelper 可以高效地处理 POCO 对象的简单序列化。 IronXL在需要加载现有Excel文件、在导出前评估公式或精细管理工作表范围时提供额外功能。 如果您的工作流程涉及从业务用户接收.xlsx文件并将其转换为CSV以供下游系统使用,IronXL可以从您的流程中移除整个转换步骤。
IronXL为 CSV 导出提供了哪些Enterprise功能?
IronXL的SaveAsCsv方法装载有多种生产就绪的功能:
| 特征 | 说明 | 用例 |
|---|---|---|
| 自定义分隔符 | 逗号、分号、制表符或任何字符 | 区域设置兼容性 |
| 编码选项 | 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", ",");Imports IronXL
' Load an existing CSV file into a workbook
Dim workBook As WorkBook = WorkBook.Load("sales_data.csv")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
' Iterate over rows and process data
For Each row In workSheet.Rows
Dim product As String = row("A").ToString()
Dim quantity As Integer = row("B").IntValue
Dim price As Decimal = CType(row("C").DoubleValue, Decimal)
Console.WriteLine($"Product: {product}, Qty: {quantity}, Price: {price:C}")
Next
' Apply a filter and re-export to a new CSV
workBook.SaveAsCsv("filtered_output.csv", ",")Imports IronXL
' Load an existing CSV file into a workbook
Dim workBook As WorkBook = WorkBook.Load("sales_data.csv")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
' Iterate over rows and process data
For Each row In workSheet.Rows
Dim product As String = row("A").ToString()
Dim quantity As Integer = row("B").IntValue
Dim price As Decimal = CType(row("C").DoubleValue, Decimal)
Console.WriteLine($"Product: {product}, Qty: {quantity}, Price: {price:C}")
Next
' Apply a filter and re-export to a new CSV
workBook.SaveAsCsv("filtered_output.csv", ",")通过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);
}Imports IronXL
Dim workBook As WorkBook = WorkBook.Load("input.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
Dim errors As New List(Of String)()
For rowIdx As Integer = 1 To workSheet.RowCount
Dim productName As String = workSheet($"A{rowIdx}").StringValue
Dim price As Double = workSheet($"C{rowIdx}").DoubleValue
If String.IsNullOrWhiteSpace(productName) Then
errors.Add($"Row {rowIdx}: Product name is empty.")
End If
If price <= 0 Then
errors.Add($"Row {rowIdx}: Price must be greater than zero (found {price}).")
End If
Next
If errors.Count = 0 Then
workBook.SaveAsCsv("validated_output.csv", ",")
Console.WriteLine("Export complete.")
Else
For Each error As String In errors
Console.WriteLine(error)
Next
End IfImports IronXL
Dim workBook As WorkBook = WorkBook.Load("input.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
Dim errors As New List(Of String)()
For rowIdx As Integer = 1 To workSheet.RowCount
Dim productName As String = workSheet($"A{rowIdx}").StringValue
Dim price As Double = workSheet($"C{rowIdx}").DoubleValue
If String.IsNullOrWhiteSpace(productName) Then
errors.Add($"Row {rowIdx}: Product name is empty.")
End If
If price <= 0 Then
errors.Add($"Row {rowIdx}: Price must be greater than zero (found {price}).")
End If
Next
If errors.Count = 0 Then
workBook.SaveAsCsv("validated_output.csv", ",")
Console.WriteLine("Export complete.")
Else
For Each error As String In errors
Console.WriteLine(error)
Next
End If这种模式在 ETL 管道中尤其有价值,因为应该拒绝错误行(并记录错误行),而不是默默导出。 IronXL的单元格式数据访问方法在Cell对象上返回强类型值,减少了静默类型转换错误的风险。
如何开始使用IronXL进行 CSV 写入?
IronXL将 CSV 写入从解析难题转变为直接操作。 它将 CSV 功能与 Excel 工作簿支持、公式计算和自动类型处理相结合,消除了管理多个库或手动数据转换的复杂性。
免费试用版让您在开发过程中无需许可证密钥即可完全访问所有功能,包括多工作表导出、公式评估和跨平台部署。 当您准备投入生产时,许可级别从涵盖商业用途的单一开发者级别开始。
入门所需关键资源:
- IronXL文档-- 完整的 API 参考和使用指南 CSV 转 Excel 转换指南——格式转换详细步骤
- DataTable导出教程——以数据库为驱动的导出模式
- 工作表范围操作——有效地处理大数据集 -故障排除指南——常见集成问题的解决方案
准备好构建可用于生产环境的 CSV 工作流了吗? 立即开始免费试用,五分钟内即可完成首次 CSV 导出。
Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。
