.NET Core 3.1 下无需打开Excel将xlsx转为CSV的可行方案咨询
适用于.NET Core 3.1的XLSX转CSV无依赖可行方案
以下方案均不需要安装Microsoft Office、不依赖Interop组件,全程不会启动Excel进程,可直接操作本地或内存中的.xlsx文件,完全兼容.NET Core 3.1环境。
方案1:使用EPPlus 4.x版本
EPPlus是轻量级Excel操作库,4.x版本为MIT开源授权,无商用限制,是目前使用最广泛的方案之一。
- 安装要求:NuGet搜索安装
EPPlus 4.5.3.3(最后一个MIT授权稳定版,更高版本为商用授权) - 示例代码:
using System.Collections.Generic; using System.IO; using System.Text; using OfficeOpenXml; public void XlsxToCsv(string xlsxFilePath, string csvFilePath, int sheetIndex = 1) { // 直接加载xlsx文件,无额外进程启动 using var package = new ExcelPackage(new FileInfo(xlsxFilePath)); var worksheet = package.Workbook.Worksheets[sheetIndex]; var rowCount = worksheet.Dimension.End.Row; var colCount = worksheet.Dimension.End.Column; // 写入CSV,自动处理特殊字符避免格式错乱 using var writer = new StreamWriter(csvFilePath, false, Encoding.UTF8); for (int row = 1; row <= rowCount; row++) { var rowData = new List<string>(); for (int col = 1; col <= colCount; col++) { var cellValue = worksheet.Cells[row, col].Text?.Replace("\"", "\"\"") ?? string.Empty; rowData.Add($"\"{cellValue}\""); } writer.WriteLine(string.Join(",", rowData)); } }
方案2:使用NPOI
完全开源免费的Excel操作库,无任何授权限制,兼容新旧版本Excel格式,社区生态成熟。
- 安装要求:NuGet搜索安装
NPOI、NPOI.OOXML - 示例代码:
using System.Collections.Generic; using System.IO; using System.Text; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; public void XlsxToCsv(string xlsxFilePath, string csvFilePath, int sheetIndex = 0) { using var fs = new FileStream(xlsxFilePath, FileMode.Open, FileAccess.Read); IWorkbook workbook = new XSSFWorkbook(fs); ISheet sheet = workbook.GetSheetAt(sheetIndex); using var writer = new StreamWriter(csvFilePath, false, Encoding.UTF8); foreach (IRow row in sheet) { var rowData = new List<string>(); for (int col = 0; col < row.LastCellNum; col++) { var cell = row.GetCell(col, MissingCellPolicy.RETURN_BLANK_AS_NULL); var cellValue = cell?.ToString()?.Replace("\"", "\"\"") ?? string.Empty; rowData.Add($"\"{cellValue}\""); } writer.WriteLine(string.Join(",", rowData)); } }
方案3:使用ClosedXML
API设计更友好,类型处理智能化,适合需要复杂单元格逻辑处理的场景。
- 安装要求:NuGet搜索安装
ClosedXML 0.95.4(该版本兼容.NET Core 3.1,更高版本需要.NET 5+环境) - 示例代码:
using System.Collections.Generic; using System.IO; using System.Text; using ClosedXML.Excel; public void XlsxToCsv(string xlsxFilePath, string csvFilePath, int sheetIndex = 1) { using var workbook = new XLWorkbook(xlsxFilePath); var worksheet = workbook.Worksheet(sheetIndex); var rows = worksheet.RowsUsed(); using var writer = new StreamWriter(csvFilePath, false, Encoding.UTF8); foreach (var row in rows) { var rowData = new List<string>(); foreach (var cell in row.CellsUsed()) { var cellValue = cell.Value.ToString()?.Replace("\"", "\"\"") ?? string.Empty; rowData.Add($"\"{cellValue}\""); } writer.WriteLine(string.Join(",", rowData)); } }
注意事项
- 如果生成的CSV需要直接用Excel打开无乱码,可将编码替换为带BOM的
Encoding.UTF8或者Encoding.GetEncoding("GB2312") - 处理百MB级超大体积xlsx文件时,建议选择支持流式读取的库避免内存占用过高
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

