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

