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

求助:Selenium无法读取Excel全部行(333行仅读取331行)

解决Apache POI读取Excel少2行数据的问题

以下是针对该问题的排查和解决步骤:

  • 确认Excel行的实际状态
    先手动检查Excel的333行是否都存在有效数据:有些行可能看似存在但所有单元格为空,POI的getLastRowNum()会返回最后一个非空行的索引,导致你误以为少读了行。可以通过sheet.getPhysicalNumberOfRows()获取表格中实际创建的行数(包括空行),和sheet.getLastRowNum()对比,判断是否是空行被忽略。

  • 检查读取循环的逻辑错误
    这是最常见的问题:POI的getLastRowNum()返回的是行的索引(从0开始),如果你的循环条件用了<而不是<=,就会漏掉最后两行。比如:
    错误写法(会少读最后一行,若总索引是332,循环到331就停止):

    for (int i = 0; i < sheet.getLastRowNum(); i++) {
        Row row = sheet.getRow(i);
        // 处理行数据
    }
    

    正确写法(包含最后一行):

    for (int i = 0; i <= sheet.getLastRowNum(); i++) {
        Row row = sheet.getRow(i);
        // 处理空行情况:如果行对象为null,说明是未初始化的空行
        if (row == null) {
            row = sheet.createRow(i);
        }
        // 继续处理单元格数据
    }
    
  • 检查POI版本与Excel格式兼容性
    确保你使用的POI版本和Excel格式匹配:处理.xlsx文件需要引入poi-ooxml依赖,处理.xls用poi依赖。尽量使用较新的POI版本(比如4.1.2及以上),旧版本可能存在读取行数的bug。

  • 排查合并单元格或特殊格式
    如果表格存在多行合并的单元格,POI只会在合并区域的第一行保存数据,其余行的Row对象会为null。这种情况需要遍历合并区域,手动为这些空行填充数据,或者调整读取逻辑识别合并区域。

  • 修复可能损坏的Excel文件
    尝试将原Excel另存为新的文件(比如重新保存为.xlsx或.xls),有时候文件格式损坏会导致POI读取不完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:15:07