在数据处理和报表工作流程中,将 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 的转换操作看起来简单,但一些细节会影响最终结果:
- 编码问题
CSV 文件的字符编码需要与数据匹配,否则非英文字符可能显示异常。UTF-8 是推荐选择,旧系统可能需要 UTF-16。 - 数字与文本的处理
Excel 在导入 CSV 时可能将数字识别为文本或反之。使用 IgnoreErrorOptions 可以避免数字与文本混淆,特别是公式或 ID 数据。 - 资源管理
每次操作完成后,请调用 Close() 释放内存,尤其在循环或批量处理场景下,否则可能导致内存占用增加。 - 列宽与行高
CSV 文件不会保存 Excel 的格式。若希望回到 Excel 后内容仍清晰可读,使用 AutoFitColumns() 和 AutoFitRows() 调整列宽和行高。 - 批量处理的容错
在处理多个文件时,建议加入异常处理,例如跳过损坏文件、记录失败文件路径,以保证批量任务不中断。 - 分隔符选择
在多地区环境下,默认逗号分隔符可能会与数字小数点冲突,可根据需求选择分号或制表符作为分隔符。
总结
在 C# 中操作 Excel 和 CSV 文件,其实比想象的简单。无论是单个文件转换,还是处理整个文件夹的数据,掌握基础方法和一些自定义设置,就能让数据处理更加高效。
结合基础转换、自定义选项和批量处理,你可以轻松完成:
- 数据自动化工作流
- 报表生成与数据整理
- 大规模数据预处理和分析
这些方法可以帮助你减少重复操作,提高准确性,同时让数据处理过程更清晰可控。