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

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

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

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

相关推荐
Byron Loong2 小时前
【网络】C#TCP 通讯
网络·tcp/ip·c#
geovindu2 小时前
密码进行加盐哈希 using CSharp,Python,Go,Java
java·python·golang·c#·哈希算法
热爱生活的五柒2 小时前
excel的使用教程
excel
傻啦嘿哟2 小时前
Python 操作 Word 文档属性与字数统计方法详解
开发语言·c#
城数派3 小时前
2025年我国省市县三级的平均坡度数据(Excel\Shp格式)
arcgis·信息可视化·数据分析·excel
.NET修仙日记3 小时前
2026 .NET 面试八股文:高频题 + 答案 + 原理(基础核心篇)
云原生·面试·职场和发展·c#·.net·面试题·微软技术
君莫愁。3 小时前
【Unity】解决UGUI的Button无法点击/点击无反应的排查方案
unity·c#·游戏引擎·解决方案·ugui·按钮·button
石榴树下的七彩鱼13 小时前
图片修复 API 接入实战:网站如何自动去除图片水印(Python / PHP / C# 示例)
图像处理·后端·python·c#·php·api·图片去水印
忒可君14 小时前
C# winform 自制分页功能
android·开发语言·c#