poi读取行数的问题

创建一个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的时候,建议想要正确获取行数,可以做一个人为的约定,比如约定导入文件第一列不允许为空,行数就按照第一列的有效行数来统计;这样就能正确获取到实际想要的行数;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值