跳至页脚内容
使用 IRONXL

使用 IronXL 将 C# 保存为 CSV 格式

使用 IronXL 在 C# 中管理 CSV 文件

在现代C#应用程序中,管理CSV文件是一项基本需求,范围从生成商业报告到导出数据库记录。 .NET提供了基本的文件写入功能,但有效地处理CSV文件,特别是在处理特殊字符、多种数据类型和大型数据集时,需要一个更强大的解决方案。 IronXL提供了一个全面的 API,可以处理 CSV 操作(例如 C# 保存到 CSV),并完全兼容 Excel,从而简化了整个过程。

本教程演示了如何利用IronXL强大的功能在C#应用程序中创建、保存和管理CSV文件。 您将学习处理各种数据源的实用技术,从简单的集合到复杂的DataTable,同时保持代码的清洁和可维护性。

使用 IronXL 将 C# 保存为 CSV 格式:图 1 - IronXL

IronXL入门指南

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

使用 IronXL 将 C# 保存为 CSV 格式:图 2 - 跨平台

打开Visual Studio,进入包管理器控制台并输入以下命令:

// Install via Package Manager Console
Install-Package IronXL.Excel
// Install via Package Manager Console
Install-Package IronXL.Excel
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

使用 IronXL 将 C# 保存为 CSV 格式:图 3 - 安装

// Or via .NET CLI
dotnet add package IronXL.Excel
// Or via .NET CLI
dotnet add package IronXL.Excel
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

安装完成后,将IronXL命名空间添加到您的 C# 文件中,即可访问所有 CSV 管理功能,例如写入数据:

using IronXL;
using IronXL;
Imports IronXL
$vbLabelText   $csharpLabel

这个简单的设置让您立即获得强大的电子表格操作能力。 与需要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 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 int Age { get; set; }
    public string? Grade { get; set; }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

您可以填充学生对象列表,然后使用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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

解释:

  1. 公共类学生定义了您的数据模型的架构。
  2. 使用示例数据创建学生对象列表。
  3. IronXL 的WorkBookWorkSheet API 用于在内存中创建结构化电子表格。
  4. 手动添加标题以确保CSV输出的可读性。
  5. 学生数据逐行写入工作表。
  6. 最后,使用SaveAsCsv()将数据保存为 CSV 文件。

输出

使用 IronXL 将 C# 保存为 CSV 格式:图 4 - 控制台输出

使用 IronXL 将 C# 保存为 CSV 格式:图 5 - Excel 输出

这种模式是可扩展的; 因此您可以轻松适应较大数据集,或者将其集成到从数据库或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}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这确保即使文件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");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此代码创建一个带有标题和数据的结构化工作簿,然后将其导出为CSV格式。 WorkBook.Create()方法在内存中初始化一个新的电子表格。 每个单元格可以保存不同的数据类型,例如字符串、整数、小数甚至公式。 当您调用SaveAsCsv()时,IronXL 会自动处理转换,正确转义任何特殊字符并保持数据完整性。

这种方法的魅力在于其灵活性。 您可以在导出前将数据作为电子表格进行操作,应用公式、格式或验证规则。 IronXL在导出过程中自动计算公式,确保您的CSV包含计算值而不是公式文本。

输出

使用 IronXL 将 C# 保存为 CSV 格式:图 6 - CSV 输出

对于自定义分隔符要求,IronXL允许您指定标准逗号的替代品:

// Save with semicolon delimiter for European locale compatibility
workbook.SaveAsCsv("sales_report.csv", ";");
// Save with semicolon delimiter for European locale compatibility
workbook.SaveAsCsv("sales_report.csv", ";");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel
// Save with tab delimiter
workbook.SaveAsCsv("sales_report.tsv", "\t");
// Save with tab delimiter
workbook.SaveAsCsv("sales_report.tsv", "\t");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这种灵活性确保了与各种区域设置和应用程序需求的兼容性。 该库自动处理编码问题,确保跨不同系统和区域正确表示字符。

使用 IronXL 将 C# 保存为 CSV 格式:图 7 - 功能

如何将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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这个示例演示了一个真实场景,其中来自数据库的订单数据需要导出用于报告或集成目的。 代码遍历DataTable结构,保留列标题和行数据。 IronXL适当地处理不同数据类型的转换,确保日期、小数和字符串在生成的CSV文件中正确格式化。

输出

使用 IronXL 将 C# 数据表保存为 CSV 格式:图 8 - 数据表到 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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这种方法比传统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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

加载Excel文件时,IronXL保留所有单元格值,包括公式计算的值。 该库在转换过程中计算Excel公式,确保您的CSV包含实际计算值。 这消除了CSV导出中出现的公式文本问题。

输入

使用 IronXL 将 C# 保存为 CSV 格式:图 9 - 示例输入

输出

使用 IronXL 将 C# 保存为 CSV 格式:图 10 - Excel 到 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}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此代码遍历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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronXL正确地转义引号,处理多行内容,并保留Unicode字符。 这种自动处理防止了手动字符串操纵方式所常见的CSV解析错误。

输出

使用 IronXL 将 C# 保存为 CSV 格式:图 11 - 特殊字符输出

对于批量处理场景,您可以高效地处理多个文件:

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);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

在处理大数据集时,内存效率变得至关重要。 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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

输出

使用 IronXL 将 C# 保存为 CSV 格式:图 12 - 大型数据集输出

结论

IronXL将C#中的CSV文件管理从一项繁琐任务转变为一个简单过程。 通过为CSV和Excel操作提供统一的API,它消除了对多个库或复杂解析逻辑的需求。 该库对特殊字符、数据类型和编码问题的自动处理确保了跨不同系统和区域的可靠数据导出。

无论您是在构建报告系统、数据集成管道,还是简单导出功能,IronXL都提供了处理高效CSV管理所需的工具。 其与现有Excel文件和DataTable结构的兼容性,使其易于集成到现有应用程序中而无需进行重大重构。 一旦您的CSV文件生成,您可以直接在Excel中打开它们或使用任何文本编辑器检查它们的原始格式,以便快速验证或排除故障。

准备好简化您的CSV操作了吗? 您可以先免费试用,或者查阅全面的API 文档以发现更多高级功能。 生产环境部署的许可起价为 749 美元,包括专业支持和更新。

使用 IronXL 将 C# 文件保存为 CSV 格式:图 13 - 许可

Curtis Chau
技术作家

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

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