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

使用2.5.2版本时Row.cells顺序与电子表格实际顺序不符咨询

POI 2.5.2版本单元格索引偏移问题原因及解决

核心原因

  • 空单元格不存入row.cells集合:这是旧版POI的典型行为。POI 2.5.2只会将有实际内容(包括格式、公式,哪怕值为空但设置了样式)的单元格加入row.cells,完全空的单元格会被跳过。比如实际列9为空、列10有内容,那row.cells里列10的单元格索引会是9,直接用实际列索引调用row.GetCell(N)就会出现偏移。
  • 隐藏列导致索引错位:部分旧版POI读取时会自动忽略隐藏列,若目标列11前存在隐藏列,集合内的单元格索引会和表格实际列索引不匹配。
  • GetCell方法无空单元格占位逻辑:POI 2.5.2的GetCell(int cellnum)默认不会为空白列创建空单元格,也不处理空单元格的占位,对应列无内容时直接返回null,进一步加剧索引偏移问题。

适配旧版本的解决办法

  • 遍历单元格时通过cell.ColumnIndex匹配实际列号,而非依赖row.cells的集合索引:
foreach (Cell cell in row.Cells)
{
    if (cell.ColumnIndex == 11)
    {
        // 处理目标单元格
        break;
    }
}
  • 若需按实际列索引直接获取,手动遍历所有可能列号并处理空值:
int maxColumn = row.LastCellNum;
for (int col = 0; col <= maxColumn; col++)
{
    Cell cell = row.GetCell(col);
    if (col == 11)
    {
        // 即使cell为null也可处理空单元格逻辑
        break;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:55:03