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
相关产品推荐
相关产品推荐

