You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:36:03