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

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

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

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

相关推荐
小羊没烦恼!6 小时前
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
java·开发语言·前端·数据库·算法·c#
UIU1149 小时前
头文件可以防什么错?运用头文件做声明
c++·学习·c#
Data-Miner11 小时前
离线AI制表:模型适配与脚本固化实操
大数据·数据库·人工智能·excel
天蓝蓝的本我11 小时前
linux本地部署Qwen3.8 27B
linux·运维·excel
扶风ff11 小时前
练题簿在线免费刷题:题目导入、章节管理、Excel 与 Word 导出,让题库更好用
学习·小程序·word·excel
连涨- AI脑波英语12 小时前
机构导出词汇训练CSV,怎样避免文本被表格当成公式执行?
csv·脑机单词速记
鑫 源14 小时前
C#源码开源, 获取macOS 电池数据,包括iOS (xamarin开发)
c#·.net·xamarin
爱吃奥利奥_wen1 天前
面向对象三板斧:封装、继承、多态,到底在“装“什么、“承“什么、“变“什么?
开发语言·经验分享·c#
wflynn1 天前
GitHub 今日推荐|SCSKiller:游戏着色器预编译消除卡顿
开源·c#·github·nvidia·amd·directx12
开开心心就好2 天前
视频压缩工具推荐,绿色版免安装双击即用
java·前端·人工智能·spring·智能手机·intellij-idea·excel