加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

POI读取excel的行数问题

(2013-07-28 11:19:03)
标签:

poi

行数

excel

it

分类: J2EE笔记

创建一个10×4的sheet

POI读取excel的行数问题

清除9-10行,清除D列(注意:不是删除行/列)

POI读取excel的行数问题

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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有