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

.NET 6+C#环境下,如何仅用可用工具解析服务器上的Excel(.xlsx)文件

适用于C#/.NET 6的免费Excel(.xlsx)解析方案

针对你排除Ole自动化、ACE组件及付费组件的场景,以下两种方案完全满足需求,无需额外服务器依赖:

1. 微软官方Open XML SDK

这是微软为Office Open XML格式(.xlsx属于该格式)提供的免费开源库,无需安装Office或任何额外服务器组件,直接通过NuGet引入即可使用,完全无许可风险。

实现步骤:

  • 安装NuGet包:Install-Package DocumentFormat.OpenXml
  • 读取示例代码:
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System.Collections.Generic;

public List<List<string>> ReadXlsxViaOpenXml(string filePath)
{
    var sheetData = new List<List<string>>();
    using (var doc = SpreadsheetDocument.Open(filePath, false))
    {
        var workbookPart = doc.WorkbookPart;
        var worksheetPart = workbookPart.WorksheetParts.First();
        var rows = worksheetPart.Worksheet.Elements<SheetData>().First().Elements<Row>();

        foreach (var row in rows)
        {
            var rowValues = new List<string>();
            foreach (var cell in row.Elements<Cell>())
            {
                string value = cell.CellValue?.Text ?? string.Empty;
                // 处理共享字符串类型的单元格
                if (cell.DataType is not null && cell.DataType.Value == CellValues.SharedString)
                {
                    var stringTable = workbookPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
                    if (stringTable != null)
                    {
                        value = stringTable.SharedStringTable.Elements<SharedStringItem>().ElementAt(int.Parse(value)).InnerText;
                    }
                }
                rowValues.Add(value);
            }
            sheetData.Add(rowValues);
        }
    }
    return sheetData;
}

注意:该库需要手动处理单元格的数据类型(如共享字符串、数字格式转换等),适合需要精细控制Excel解析逻辑的场景。

2. EPPlus LGPL开源版本

EPPlus是一款封装更友好的Excel操作库,5.x及之前的部分版本采用LGPL开源许可,非商用场景可免费使用,API更直观,上手成本更低。

实现步骤:

  • 安装NuGet包:Install-Package EPPlus -Version 5.8.1(此版本为LGPL许可的稳定版本)
  • 读取示例代码:
using OfficeOpenXml;
using System.Collections.Generic;
using System.IO;

public List<List<string>> ReadXlsxViaEPPlus(string filePath)
{
    var sheetData = new List<List<string>>();
    // 非商用场景设置许可上下文
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
    
    using (var package = new ExcelPackage(new FileInfo(filePath)))
    {
        var worksheet = package.Workbook.Worksheets.First();
        int maxRow = worksheet.Dimension.End.Row;
        int maxCol = worksheet.Dimension.End.Column;

        for (int row = 1; row <= maxRow; row++)
        {
            var rowValues = new List<string>();
            for (int col = 1; col <= maxCol; col++)
            {
                rowValues.Add(worksheet.Cells[row, col].Text ?? string.Empty);
            }
            sheetData.Add(rowValues);
        }
    }
    return sheetData;
}

注意:商用场景需确认EPPlus的许可条款,若不符合LGPL要求则需使用其商业版本,但你的场景排除了付费组件,非商用场景可放心使用。


内容的提问来源于stack exchange,提问作者Sonnich Jensen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:05:21