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

C# EPPlus仅返回含值单元格,数据采集逻辑异常求助

问题分析

问题出在myWorksheet.Cells[rowNum, 1, rowNum, totalColumns]的取值逻辑上:EPPlus的Worksheet.Dimension只会识别包含实际数据的单元格范围,当某行仅前3-5列有值时,该行的Cells集合不会包含后面无数据的列,导致你的Lambda表达式根本没机会处理这些空列,最终生成的数组长度不足9列,和表头行的长度不匹配。

解决方案

直接按预设的总列数(9列)循环遍历每一列,手动获取每一列的单元格值,确保每行都生成固定长度的数组:

using (ExcelPackage xlPackage = new ExcelPackage(new System.IO.FileInfo(strInputFile)))
{
    ExcelWorksheet myWorksheet = xlPackage.Workbook.Worksheets.First();
    int totalRows = myWorksheet.Dimension.End.Row;
    // 直接指定固定列数9,或者从表头行获取准确列数
    int totalColumns = 9; 

    for (int rowNum = 1; rowNum <= totalRows; rowNum++)
    {
        var rowData = new string[totalColumns];
        for (int colNum = 1; colNum <= totalColumns; colNum++)
        {
            var cell = myWorksheet.Cells[rowNum, colNum];
            rowData[colNum - 1] = cell.Value == null ? string.Empty : cell.Value.ToString();
        }
        listOutput.Add(rowData);
    }
}
额外优化说明
  • 去掉了string.Join("~", row).Split('~')的冗余操作:先拼接再拆分完全没必要,直接生成字符串数组效率更高,还能避免数据中包含~字符时的拆分错误。
  • 如果不想硬编码9列,可以从表头行(第1行)的Dimension获取准确列数,确保和表头一致:
    int totalColumns = myWorksheet.Cells[1, 1, 1, myWorksheet.Dimension.End.Column].Count();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:25:24