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

在数据处理和报表工作流程中,将 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

验证安装是否成功

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

cs 复制代码
using Spire.Xls;

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

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


Excel 转 CSV

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

  • 将数据提供给数据库或 ETL 流程

  • 生成可供 Web 服务或数据分析工具使用的 CSV 文件

  • 简化文件传输和存储,减少文件体积

基础转换

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

cs 复制代码
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 同样简单。你可以在导入时自动调整格式、自动适应列宽行高,并处理数字与文本冲突。

cs 复制代码
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:

cs 复制代码
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 文件,其实比想象的简单。无论是单个文件转换,还是处理整个文件夹的数据,掌握基础方法和一些自定义设置,就能让数据处理更加高效。

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

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

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

相关推荐
周杰伦fans11 分钟前
C# CAD 二次开发:无需启动 AutoCAD 实现 DWG 转 DXF 的完整技术指南
开发语言·c#
影寂ldy36 分钟前
C# 多态与函数重载(静态多态)
开发语言·c#
程序大视界1 小时前
【Python系列课程】Pandas(六):数据读写——CSV与Excel文件操作
python·excel·pandas
小满Autumn1 小时前
依赖注入设计模式速查手册
开发语言·c#·wpf·mvvm·依赖注入
z落落2 小时前
C# 静态成员 vs 非静态成员(调用规则+内存特点)+只读和常量 const常量 / readonly / static readonly 三者终极区别
java·开发语言·c#
Xin_ye100862 小时前
C# 零基础到精通教程 - WPF 专题三:高级控件与自定义控件
开发语言·c#·wpf
xiaoshuaishuai83 小时前
C# AvaloniaUI‌的IValueConverter
开发语言·c#
z落落3 小时前
C# 虚方法(virtual)与抽象方法 +区别+new方法隐藏 & override方法重写
java·开发语言·c#
xiaoshuaishuai83 小时前
C# Avalonia UI的ItemControl
开发语言·ui·c#
Land03294 小时前
RPA 实现 Excel 自动化实操教程:批量数据处理零基础落地指南
自动化·excel·rpa