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