创建一个10×4的sheet
清除9-10行,清除D列(注意:不是删除行/列)
测试代码
main() {
...
Workbook workBook = null;
InputStream fin = null;
logger.info("sheet1 从10*4改成8*3后测试:");
fin = new FileInputStream("f:/book1.xls");
workBook = WorkbookFactory.create(fin);
Sheet sheet = workBook.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();
int physicalRowNum = sheet.getPhysicalNumberOfRows();
logger.info("lastRowNum:{}, physicalRowNum:{}", lastRowNum, physicalRowNum);
fin.close();
}
直接读取,测试1:lastRowNum等于physicalRowNum,行9、10计算在内;说明lastRowNum从0开始,physicalRowNum从1开始;但是,显然两个条数都不是我们想要的,都不合理;
2013-07-28 10:47:56,855 INFO (myTest.POITest:325) - sheet1 从10*4改成8*3后测试:
2013-07-28 10:47:57,157 INFO (myTest.POITest:331) - lastRowNum:9, physicalRowNum:10
将行5-10删除后,测试2:lastRowNum等于physicalRowNum,行5-10被有效删除;
2013-07-28 11:07:22,307 INFO (myTest.POITest:325) - sheet1 从10*4改成8*3后测试:
2013-07-28 11:07:22,583 INFO (myTest.POITest:331) - lastRowNum:3, physicalRowNum:4
在行6追加一行后,测试3:lastRowNum正确反映了最后一行的位置,physicalRowNum正确反映了物理行数共几条;
2013-07-28 11:09:49,222 INFO (myTest.POITest:325) - sheet1 从10*4改成8*3后测试:
2013-07-28 11:09:49,503 INFO (myTest.POITest:331) - lastRowNum:5, physicalRowNum:5
小结
在没有格式的前提下,getLastRowNum方法能够正确返回最后一行的位置;getPhysicalNumberOfRows方法能够正确返回物理的行数;
在有格式的前提下,这两个方法都是不合理的;
所以,在做导入excel的时候,建议想要正确获取行数,可以做一个人为的约定,比如约定导入文件第一列不允许为空,行数就按照第一列的有效行数来统计;这样就能正确获取到实际想要的行数;