如何在 C# 中使用 IronXL 将数据保存为 CSV
在现代C#应用程序中,管理CSV文件是一项基本需求,范围从生成商业报告到导出数据库记录。 .NET提供了基本的文件写入功能,但有效地处理CSV文件,特别是在处理特殊字符、多种数据类型和大型数据集时,需要一个更强大的解决方案。 IronXL通过提供一个综合的API简化了整个过程,可以处理CSV操作,如C#保存到CSV,以及完全Excel兼容性。
本教程演示了如何利用IronXL强大的功能在C#应用程序中创建、保存和管理CSV文件。 您将学习处理各种数据源的实用技术,从简单的集合到复杂的DataTable,同时保持代码的清洁和可维护性。

IronXL入门指南
在深入了解CSV操作之前,您需要在您的项目中安装IronXL。 该库支持.NET Framework 4.6.2+和.NET Core 2+,这使其兼容于传统和现代应用程序。 IronXL还提供了出色的跨平台支持,可以在Windows、Linux和macOS环境中无缝运行。

打开Visual Studio,进入包管理器控制台并输入以下命令:
Install-Package IronXL.Excel

或通过 .NET CLI:
dotnet add package IronXL.Exceldotnet add package IronXL.Excel安装后,添加 IronXL 命名空间到您的 C# 文件,以访问所有 CSV 管理功能,例如写入数据:
using IronXL;using IronXL;这个简单的设置让您立即获得强大的电子表格操作能力。 与需要Excel Interop或复杂CSV解析逻辑的传统方法不同,IronXL提供了一种直观的API,可在后台处理复杂性。 该库独立运行,无需安装Microsoft Office,非常适合服务器部署和容器化应用程序。
如果安装或初始化库时发生错误,请确保您的项目目标符合支持的.NET版本,并且所有依赖项都正确恢复。
如何保存和写入数据到新的CSV文件?
使用IronXL从头创建或写入CSV文件遵循直观的模式。 您可以通过创建一个工作簿开始,将所有数据添加到单元格,然后以CSV格式保存。 这种方法比基本的字符串连接方法提供了更大的控制。
在深入了解主要的CSV创建逻辑之前,这里有一个使用公共类学生结构的简单模型定义。 该模型表示我们可以稍后导出为CSV的结构化数据。
// Define a Student class to model your data
public class Student
{
public string? Name { get; set; } // public string firstname, public string lastname
public int Age { get; set; }
public string? Grade { get; set; }
}// Define a Student class to model your data
public class Student
{
public string? Name { get; set; } // public string firstname, public string lastname
public int Age { get; set; }
public string? Grade { get; set; }
}您可以填充学生对象列表,然后使用IronXL有效地将其导出到CSV文件。此示例显示了如何将类属性映射到工作表单元格:
using System;
using System.Collections.Generic;
using IronXL;
class Program
{
static void Main(string[] args)
{
// Create sample data using the student class
List<Student> students = new List<Student>()
{
new Student { Name = "Alice Johnson", Age = 20, Grade = "A" },
new Student { Name = "Brian Smith", Age = 22, Grade = "B+" },
new Student { Name = "Chloe Brown", Age = 19, Grade = "A-" },
new Student { Name = "David Clark", Age = 21, Grade = "B" }
};
// Create a new workbook and worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Students");
// Add headers
sheet["A1"].Value = "Name";
sheet["B1"].Value = "Age";
sheet["C1"].Value = "Grade";
// Add student data to the worksheet
for (int i = 0; i < students.Count; i++)
{
sheet[$"A{i + 2}"].Value = students[i].Name;
sheet[$"B{i + 2}"].IntValue = students[i].Age;
sheet[$"C{i + 2}"].Value = students[i].Grade;
}
// Save as CSV file
workbook.SaveAsCsv("students.csv");
Console.WriteLine("students.csv file has been created successfully!");
}
}using System;
using System.Collections.Generic;
using IronXL;
class Program
{
static void Main(string[] args)
{
// Create sample data using the student class
List<Student> students = new List<Student>()
{
new Student { Name = "Alice Johnson", Age = 20, Grade = "A" },
new Student { Name = "Brian Smith", Age = 22, Grade = "B+" },
new Student { Name = "Chloe Brown", Age = 19, Grade = "A-" },
new Student { Name = "David Clark", Age = 21, Grade = "B" }
};
// Create a new workbook and worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Students");
// Add headers
sheet["A1"].Value = "Name";
sheet["B1"].Value = "Age";
sheet["C1"].Value = "Grade";
// Add student data to the worksheet
for (int i = 0; i < students.Count; i++)
{
sheet[$"A{i + 2}"].Value = students[i].Name;
sheet[$"B{i + 2}"].IntValue = students[i].Age;
sheet[$"C{i + 2}"].Value = students[i].Grade;
}
// Save as CSV file
workbook.SaveAsCsv("students.csv");
Console.WriteLine("students.csv file has been created successfully!");
}
}解释:
- 公共类学生定义了您的数据模型的架构。
- 使用示例数据创建学生对象列表。
- IronXL的WorkBook和WorkSheet API用于在内存中创建结构化电子表格。
- 手动添加标题以确保CSV输出的可读性。
- 学生数据逐行写入工作表。
- 最后,数据将使用SaveAsCsv()保存为CSV文件。
输出


这种模式是可扩展的; 因此您可以轻松适应较大数据集,或者将其集成到从数据库或API检索学生数据的应用程序中。
例如,如果在写入文件时发生错误(例如,文件被锁定或路径无效),您可以优雅地处理它:
try
{
workbook.SaveAsCsv("students.csv");
}
catch (Exception ex)
{
Console.WriteLine($"Error occurred while saving CSV: {ex.Message}");
}try
{
workbook.SaveAsCsv("students.csv");
}
catch (Exception ex)
{
Console.WriteLine($"Error occurred while saving CSV: {ex.Message}");
}这确保即使文件I/O问题出现,您的应用程序仍然保持强大和信息丰富。
以下是创建基本CSV文件的示例代码。
static void Main(string[] args)
{
// Create a new workbook
var writer = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = writer.CreateWorkSheet("Sales Data");
// Add headers
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Quantity";
sheet["C1"].Value = "Price";
sheet["D1"].Value = "Total";
// Add data rows
sheet["A2"].Value = "Widget A";
sheet["B2"].IntValue = 100;
sheet["C2"].DecimalValue = 29.99m;
sheet["D2"].Formula = "=B2*C2";
sheet["A3"].Value = "Widget B";
sheet["B3"].IntValue = 50;
sheet["C3"].DecimalValue = 49.99m;
sheet["D3"].Formula = "=B3*C3";
// Save as new CSV file
writer.SaveAsCsv("sales_report.csv");
}static void Main(string[] args)
{
// Create a new workbook
var writer = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = writer.CreateWorkSheet("Sales Data");
// Add headers
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Quantity";
sheet["C1"].Value = "Price";
sheet["D1"].Value = "Total";
// Add data rows
sheet["A2"].Value = "Widget A";
sheet["B2"].IntValue = 100;
sheet["C2"].DecimalValue = 29.99m;
sheet["D2"].Formula = "=B2*C2";
sheet["A3"].Value = "Widget B";
sheet["B3"].IntValue = 50;
sheet["C3"].DecimalValue = 49.99m;
sheet["D3"].Formula = "=B3*C3";
// Save as new CSV file
writer.SaveAsCsv("sales_report.csv");
}此代码创建一个带有标题和数据的结构化工作簿,然后将其导出为CSV格式。 WorkBook.Create()方法初始化内存中新建的电子表格。 每个单元格可以保存不同的数据类型,例如字符串、整数、小数甚至公式。 当您调用SaveAsCsv()时,IronXL自动处理转换,正确转义任何特殊字符并保持数据完整性。
这种方法的魅力在于其灵活性。 您可以在导出前将数据作为电子表格进行操作,应用公式、格式或验证规则。 IronXL在导出过程中自动计算公式,确保您的CSV包含计算值而不是公式文本。
输出

对于自定义分隔符要求,IronXL允许您指定标准逗号的替代品:
// Save with semicolon delimiter for European locale compatibility
workbook.SaveAsCsv("sales_report.csv", ";");
// Save with tab delimiter
workbook.SaveAsCsv("sales_report.tsv", "\t");// Save with semicolon delimiter for European locale compatibility
workbook.SaveAsCsv("sales_report.csv", ";");
// Save with tab delimiter
workbook.SaveAsCsv("sales_report.tsv", "\t");这种灵活性确保了与各种区域设置和应用程序需求的兼容性。 该库自动处理编码问题,确保跨不同系统和区域正确表示字符。

如何将DataTable导出到CSV?
DataTable在.NET应用程序中用于存储从数据库或业务逻辑中获得的表格数据是无处不在的。 IronXL提供无缝的DataTable到CSV转换,在整个过程中保留列名和数据类型。
// Create a sample DataTable (simulating database results) to store data
DataTable customerOrders = new DataTable("CustomerOrders");
customerOrders.Columns.Add("OrderID", typeof(int));
customerOrders.Columns.Add("CustomerName", typeof(string));
customerOrders.Columns.Add("OrderDate", typeof(DateTime));
customerOrders.Columns.Add("Amount", typeof(decimal));
// Add sample data
customerOrders.Rows.Add(1001, "Acme Corp", new DateTime(2024, 1, 15), 1250.50m);
customerOrders.Rows.Add(1002, "TechStart Inc", new DateTime(2024, 1, 16), 3500.00m);
customerOrders.Rows.Add(1003, "Global Systems", new DateTime(2024, 1, 17), 875.25m);
// Convert DataTable to CSV using IronXL
WorkBook workbook = WorkBook.Create();
WorkSheet sheet = workbook.CreateWorkSheet("Orders");
// Add headers from DataTable columns
for (int i = 0; i < customerOrders.Columns.Count; i++)
{
sheet.SetCellValue(0, i, customerOrders.Columns[i].ColumnName);
}
// Add data rows
for (int row = 0; row < customerOrders.Rows.Count; row++)
{
for (int col = 0; col < customerOrders.Columns.Count; col++)
{
sheet.SetCellValue(row + 1, col, customerOrders.Rows[row][col]);
}
}
// Export to CSV
workbook.SaveAsCsv("customer_orders.csv");// Create a sample DataTable (simulating database results) to store data
DataTable customerOrders = new DataTable("CustomerOrders");
customerOrders.Columns.Add("OrderID", typeof(int));
customerOrders.Columns.Add("CustomerName", typeof(string));
customerOrders.Columns.Add("OrderDate", typeof(DateTime));
customerOrders.Columns.Add("Amount", typeof(decimal));
// Add sample data
customerOrders.Rows.Add(1001, "Acme Corp", new DateTime(2024, 1, 15), 1250.50m);
customerOrders.Rows.Add(1002, "TechStart Inc", new DateTime(2024, 1, 16), 3500.00m);
customerOrders.Rows.Add(1003, "Global Systems", new DateTime(2024, 1, 17), 875.25m);
// Convert DataTable to CSV using IronXL
WorkBook workbook = WorkBook.Create();
WorkSheet sheet = workbook.CreateWorkSheet("Orders");
// Add headers from DataTable columns
for (int i = 0; i < customerOrders.Columns.Count; i++)
{
sheet.SetCellValue(0, i, customerOrders.Columns[i].ColumnName);
}
// Add data rows
for (int row = 0; row < customerOrders.Rows.Count; row++)
{
for (int col = 0; col < customerOrders.Columns.Count; col++)
{
sheet.SetCellValue(row + 1, col, customerOrders.Rows[row][col]);
}
}
// Export to CSV
workbook.SaveAsCsv("customer_orders.csv");这个示例演示了一个真实场景,其中来自数据库的订单数据需要导出用于报告或集成目的。 代码遍历DataTable结构,保留列标题和行数据。 IronXL适当地处理不同数据类型的转换,确保日期、小数和字符串在生成的CSV文件中正确格式化。
输出

对于涉及多个相关表或高级数据转换的更复杂场景,您可以利用IronXL的单元格引用和公式功能:
// Add summary row with formulas
int lastRow = customerOrders.Rows.Count + 1;
sheet[$"A{lastRow + 1}"].Value = "Total:";
sheet[$"D{lastRow + 1}"].Formula = $"=SUM(D2:D{lastRow})";
// Calculate and save
workbook.SaveAsCsv("customer_orders_with_total.csv");// Add summary row with formulas
int lastRow = customerOrders.Rows.Count + 1;
sheet[$"A{lastRow + 1}"].Value = "Total:";
sheet[$"D{lastRow + 1}"].Formula = $"=SUM(D2:D{lastRow})";
// Calculate and save
workbook.SaveAsCsv("customer_orders_with_total.csv");这种方法比传统DataTable导出方法提供了更多的控制。 您可以在最终导出之前添加计算字段、应用条件格式逻辑或重组列。 IronXL文档提供了高级DataTable操作场景的综合示例。
如何将Excel文件转换为CSV?
IronXL最强大的特性之一是它能够无缝处理现有Excel文件,将它们转换为CSV格式,同时保留数据完整性。 这尤其有用,当需要与生成Excel报告但下游处理需要CSV的系统进行集成时。
// Load an existing Excel file
WorkBook existingWorkbook = WorkBook.Load("Budget.xlsx");
// Access the first worksheet
WorkSheet sheet = existingWorkbook.WorkSheets[0];
// Save as CSV - single sheet
sheet.SaveAsCsv("Budget.csv");
// Or save entire workbook (creates multiple CSV files for multiple sheets)
existingWorkbook.SaveAsCsv("BudgetReport.csv");// Load an existing Excel file
WorkBook existingWorkbook = WorkBook.Load("Budget.xlsx");
// Access the first worksheet
WorkSheet sheet = existingWorkbook.WorkSheets[0];
// Save as CSV - single sheet
sheet.SaveAsCsv("Budget.csv");
// Or save entire workbook (creates multiple CSV files for multiple sheets)
existingWorkbook.SaveAsCsv("BudgetReport.csv");加载Excel文件时,IronXL保留所有单元格值,包括公式计算的值。 该库在转换过程中计算Excel公式,确保您的CSV包含实际计算值。 这消除了CSV导出中出现的公式文本问题。
输入

输出

对于包含多张工作表的工作簿,IronXL智能地处理每张工作表:
// Process multiple sheets
WorkBook multiSheetWorkbook = WorkBook.Load("annual_data.xlsx");
foreach (WorkSheet sheet in multiSheetWorkbook.WorkSheets)
{
string fileName = $"export_{sheet.Name}.csv";
sheet.SaveAsCsv(fileName);
Console.WriteLine($"Exported {sheet.Name} to {fileName}");
}// Process multiple sheets
WorkBook multiSheetWorkbook = WorkBook.Load("annual_data.xlsx");
foreach (WorkSheet sheet in multiSheetWorkbook.WorkSheets)
{
string fileName = $"export_{sheet.Name}.csv";
sheet.SaveAsCsv(fileName);
Console.WriteLine($"Exported {sheet.Name} to {fileName}");
}此代码遍历Excel文件中的所有工作表,为每张表创建单独的CSV文件。 工作表名称保存在文件命名中,易于识别每个CSV文件的来源。IronXL支持多种Excel格式,包括XLSX、XLS、XLSM和XLTX,提供广泛兼容性用于不同的Excel版本和用例。 在文档中了解更多关于 格式转换 的信息。
高级CSV管理技术
除了基本的CSV创建,IronXL提供了复杂场景处理中常见于生产环境中的理想选择。 这些能力将其与简单的文件写入方法区分开来。
在处理特殊字符时,IronXL自动处理转义和编码:
WorkBook workbook = WorkBook.Create();
WorkSheet sheet = workbook.CreateWorkSheet("Data");
// Data with special characters
sheet["A1"].Value = "Company \"ABC\", Inc."; // Quotes
sheet["B1"].Value = "Line 1\nLine 2"; // Newlines
sheet["C1"].Value = "Price: €50,00"; // Unicode characters
workbook.SaveAsCsv("special_chars.csv");WorkBook workbook = WorkBook.Create();
WorkSheet sheet = workbook.CreateWorkSheet("Data");
// Data with special characters
sheet["A1"].Value = "Company \"ABC\", Inc."; // Quotes
sheet["B1"].Value = "Line 1\nLine 2"; // Newlines
sheet["C1"].Value = "Price: €50,00"; // Unicode characters
workbook.SaveAsCsv("special_chars.csv");IronXL正确地转义引号,处理多行内容,并保留Unicode字符。 这种自动处理防止了手动字符串操纵方式所常见的CSV解析错误。
输出

对于批量处理场景,您可以高效地处理多个文件:
string[] sourceFiles = Directory.GetFiles("input_folder", "*.xlsx");
foreach (string file in sourceFiles)
{
WorkBook wb = WorkBook.Load(file);
var csv = Path.ChangeExtension(file, ".csv");
wb.SaveAsCsv(csv);
}string[] sourceFiles = Directory.GetFiles("input_folder", "*.xlsx");
foreach (string file in sourceFiles)
{
WorkBook wb = WorkBook.Load(file);
var csv = Path.ChangeExtension(file, ".csv");
wb.SaveAsCsv(csv);
}在处理大数据集时,内存效率变得至关重要。 IronXL在内部优化内存使用,但您可以通过分块处理数据和正确释放资源来进一步提高性能:
WorkBook largeWorkbook = WorkBook.Create();
WorkSheet sheet = largeWorkbook.CreateWorkSheet("LargeData");
// Process in batches
const int batchSize = 1000;
for (int batch = 0; batch < 10; batch++)
{
for (int row = 0; row < batchSize; row++)
{
int actualRow = (batch * batchSize) + row;
sheet.SetCellValue(actualRow, 0, $"Row {actualRow}");
// Add more data...
sheet.SetCellValue(actualRow, 1, DateTime.Now);
sheet.SetCellValue(actualRow, 2, $"Batch {batch + 1}");
}
}
largeWorkbook.SaveAsCsv("large_dataset.csv");WorkBook largeWorkbook = WorkBook.Create();
WorkSheet sheet = largeWorkbook.CreateWorkSheet("LargeData");
// Process in batches
const int batchSize = 1000;
for (int batch = 0; batch < 10; batch++)
{
for (int row = 0; row < batchSize; row++)
{
int actualRow = (batch * batchSize) + row;
sheet.SetCellValue(actualRow, 0, $"Row {actualRow}");
// Add more data...
sheet.SetCellValue(actualRow, 1, DateTime.Now);
sheet.SetCellValue(actualRow, 2, $"Batch {batch + 1}");
}
}
largeWorkbook.SaveAsCsv("large_dataset.csv");输出

结论
IronXL将C#中的CSV文件管理从一项繁琐任务转变为一个简单过程。 通过为CSV和Excel操作提供统一的API,它消除了对多个库或复杂解析逻辑的需求。 该库对特殊字符、数据类型和编码问题的自动处理确保了跨不同系统和区域的可靠数据导出。
无论您是在构建报告系统、数据集成管道,还是简单导出功能,IronXL都提供了处理高效CSV管理所需的工具。 其与现有Excel文件和DataTable结构的兼容性,使其易于集成到现有应用程序中而无需进行重大重构。 一旦您的CSV文件生成,您可以直接在Excel中打开它们或使用任何文本编辑器检查它们的原始格式,以便快速验证或排除故障。
准备好简化您的CSV操作了吗? 从免费试用开始,包括专业支持和更新。

常见问题解答
使用IronXL在C#中保存数据为CSV的优势是什么?
IronXL提供了简化处理CSV操作的全面API,包括将数据保存为CSV,同时还提供完整的Excel兼容性,使其更易于管理特殊字符、多种数据类型和大数据集。
IronXL如何处理CSV文件中的特殊字符?
IronXL通过提供强大的解析和写入能力,有效管理CSV文件中的特殊字符,确保在文件操作期间维护数据完整性。
IronXL在保存为CSV时能否管理大型数据集?
是的,IronXL专为高效处理大型数据集而设计,提供性能优化的方法,将数据保存到CSV文件中而不影响速度或可靠性。
IronXL是否支持CSV操作的多种数据类型?
IronXL支持多种数据类型,使开发者能够无缝地将复杂的数据集导出为CSV格式,而不会遇到数据类型兼容性问题。
在处理CSV文件时,IronXL与Excel兼容吗?
IronXL提供完整的Excel兼容性,这意味着它可以在处理CSV文件时与Excel操作一起使用,使其成为处理电子表格数据的开发者的多功能工具。
是什么让IronXL成为C#中CSV文件管理的强大解决方案?
IronXL的强大解决方案来自其全面的API,该API简化了复杂的CSV操作,并提供了Excel兼容性和对大型数据集的支持等附加功能。
IronXL如何简化在C#中保存为CSV的过程?
IronXL通过抽象与CSV文件管理相关的复杂性简化了过程,为开发者提供了简便的方法以高效地将数据保存为CSV。






