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

使用EPPlus时IEnumerable无ToDataTable方法的报错问题

EPPlus中ToDataTable()报错的解决方法

错误原因

  1. EPPlus原生并未为IEnumerable<object>类型提供ToDataTable()扩展方法,你调用的方法不属于EPPlus库,也不是.NET基础类库的内置方法。
  2. 你通过worksheet.Cells.Select(c => c.Value)得到的是所有单元格值的扁平集合,没有行、列的结构化信息,即便存在ToDataTable()方法,也无法将这种扁平数据转换为符合预期的DataTable。

正确实现方式

要将Excel工作表数据转换为DataTable,需要手动遍历工作表的行和列,构建结构化的DataTable:

using OfficeOpenXml;
using System.Data;
using System.IO;

var connectionString = "";
string filePath = @"C:\path\to\file.xlsx";
using (var package = new ExcelPackage(new FileInfo(filePath)))
{
    var worksheet = package.Workbook.Worksheets[1];
    var dataTable = new DataTable();

    // 读取表头(默认第一行为表头)
    foreach (var headerCell in worksheet.Cells[1, 1, 1, worksheet.Dimension.End.Column])
    {
        dataTable.Columns.Add(headerCell.Text);
    }

    // 读取数据行(从第二行开始遍历)
    for (int rowIndex = 2; rowIndex <= worksheet.Dimension.End.Row; rowIndex++)
    {
        var currentRow = worksheet.Cells[rowIndex, 1, rowIndex, worksheet.Dimension.End.Column];
        DataRow dataRow = dataTable.NewRow();
        
        foreach (var cell in currentRow)
        {
            dataRow[cell.Start.Column - 1] = cell.Value;
        }
        
        dataTable.Rows.Add(dataRow);
    }

    // 后续处理DataTable的代码
}

补充说明

  • 如果你的项目中曾经定义过自定义的ToDataTable()扩展方法,需要确保引用了对应的命名空间,并且该方法的参数类型与你当前的IEnumerable<object>匹配。
  • EPPlus的核心能力是读写Excel单元格,并没有内置的一键转DataTable的方法,必须通过遍历结构化的单元格区域来实现转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:25:42