如何使用 C# 高效实现 Excel 与 CSV 的互相转换

1 阅读5分钟

在数据处理和报表工作流程中,将 Excel 文件和 CSV 文件互相转换是非常常见的需求。CSV 文件轻量、易解析,非常适合与数据库、数据分析工具或 Web 服务集成,而 Excel 则提供丰富的格式、公式和数据验证功能。在许多企业应用中,你可能需要在这两者之间灵活转换,以便兼顾数据处理效率和可读性。

使用 C#,你可以高效地完成这些转换,同时确保数据完整性、格式准确,并保持自动化处理的灵活性。本文将从基础操作讲起,逐步介绍自定义设置、批量处理及高级实践技巧,帮助你在实际工作中轻松应对各种转换需求。

准备工作:安装所需库

在编写代码之前,你需要安装一个支持 Excel 文件操作的库。本文使用 Free Spire.XLS for .NET,它是免费的 Excel 库,支持现代 Excel 功能,并提供将 Excel 转 CSV 以及 CSV 转 Excel 的内置方法。

通过 NuGet 安装

在 Visual Studio 项目中运行以下命令:

Install-Package FreeSpire.XLS

验证安装是否成功

安装完成后,可以创建一个简单的控制台程序来验证:

using Spire.Xls;

class Program
{
    static void Main()
    {
        Workbook workbook = new Workbook();
        System.Console.WriteLine("已成功安装。");
    }
}

如果程序运行无报错,说明库已经可以使用,可以开始文件转换操作。

Excel 转 CSV

将 Excel 工作表导出为 CSV 是最常见的操作,尤其在以下场景中:

  • 将数据提供给数据库或 ETL 流程
  • 生成可供 Web 服务或数据分析工具使用的 CSV 文件
  • 简化文件传输和存储,减少文件体积

基础转换

下面示例展示了如何将 Excel 文件的第一个工作表转换为 UTF-8 编码的 CSV 文件:

using Spire.Xls;
using System.Text;

namespace ConvertExcelToCsv
{
    class Program
    {
        static void Main(string[] args)
        {
            Workbook workbook = new Workbook();
            workbook.LoadFromFile("Sample.xlsx");

            Worksheet sheet = workbook.Worksheets[0];
            sheet.SaveToFile("ExcelToCSV.csv", ",", Encoding.UTF8);

            workbook.Close();
        }
    }
}

这种方法可以保留文本、数字以及基本格式,生成的 CSV 文件可被 Excel、数据库或任何支持 CSV 的工具打开。

自定义 CSV 输出

有时候,你可能希望对 Excel 数据导出的方式进行更多控制:

  • 指定分隔符(逗号、分号、制表符等)
  • 处理特殊字符或非英文文本
  • 保留或忽略表头
  • 控制数字和日期格式

Spire.XLS 允许你明确指定分隔符和编码,从而避免不同地区设置或非标准字符导致的问题。

CSV 转 Excel

将 CSV 导入 Excel 同样简单。你可以在导入时自动调整格式、自动适应列宽行高,并处理数字与文本冲突。

using Spire.Xls;

namespace ConvertCsvToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            Workbook workbook = new Workbook();
            workbook.LoadFromFile(@"ExcelToCSV.csv", ",", 1, 1);

            Worksheet sheet = workbook.Worksheets[0];
            CellRange usedRange = sheet.AllocatedRange;
            usedRange.IgnoreErrorOptions = IgnoreErrorType.NumberAsText;
            usedRange.AutoFitColumns();
            usedRange.AutoFitRows();

            workbook.SaveToFile("CSVToExcel.xlsx", ExcelVersion.Version2013);
            workbook.Close();
        }
    }
}

这种方法不仅保证数据完整导入,同时也让内容在 Excel 中易于阅读和进一步处理。

高级场景:批量转换

在实际应用中,你可能需要自动处理多个文件。例如,将一个文件夹内所有 Excel 文件批量转换为 CSV:

using Spire.Xls;
using System.IO;
using System.Text;

class BatchConvert
{
    static void Main()
    {
        string inputFolder = @"C:\InputExcels";
        string outputFolder = @"C:\OutputCSVs";

        foreach (string filePath in Directory.GetFiles(inputFolder, "*.xlsx"))
        {
            Workbook workbook = new Workbook();
            workbook.LoadFromFile(filePath);

            Worksheet sheet = workbook.Worksheets[0];
            string fileName = Path.GetFileNameWithoutExtension(filePath);

            sheet.SaveToFile(Path.Combine(outputFolder, fileName + ".csv"), ",", Encoding.UTF8);
            workbook.Close();
        }

        System.Console.WriteLine("批量转换完成。");
    }
}

这种方法非常适合:

  • 自动化 ETL 流程
  • 每日或每周报表批量导出
  • 对大规模数据集进行分析和预处理

在批量处理时,注意保持文件路径、命名规范和内存管理,避免处理大文件夹时出现性能问题。

实用技巧与注意事项

虽然 Excel 与 CSV 的转换操作看起来简单,但一些细节会影响最终结果:

  1. 编码问题
    CSV 文件的字符编码需要与数据匹配,否则非英文字符可能显示异常。UTF-8 是推荐选择,旧系统可能需要 UTF-16。
  2. 数字与文本的处理
    Excel 在导入 CSV 时可能将数字识别为文本或反之。使用 ​​​IgnoreErrorOptions​​ 可以避免数字与文本混淆,特别是公式或 ID 数据。
  3. 资源管理
    每次操作完成后,请调用 ​​​Close()​​ 释放内存,尤其在循环或批量处理场景下,否则可能导致内存占用增加。
  4. 列宽与行高
    CSV 文件不会保存 Excel 的格式。若希望回到 Excel 后内容仍清晰可读,使用 ​​​AutoFitColumns()​​​ 和 ​​AutoFitRows()​​ 调整列宽和行高。
  5. 批量处理的容错
    在处理多个文件时,建议加入异常处理,例如跳过损坏文件、记录失败文件路径,以保证批量任务不中断。
  6. 分隔符选择
    在多地区环境下,默认逗号分隔符可能会与数字小数点冲突,可根据需求选择分号或制表符作为分隔符。

总结

在 C# 中操作 Excel 和 CSV 文件,其实比想象的简单。无论是单个文件转换,还是处理整个文件夹的数据,掌握基础方法和一些自定义设置,就能让数据处理更加高效。

结合基础转换、自定义选项和批量处理,你可以轻松完成:

  • 数据自动化工作流
  • 报表生成与数据整理
  • 大规模数据预处理和分析

这些方法可以帮助你减少重复操作,提高准确性,同时让数据处理过程更清晰可控。