apache poi查找工作表中的行数

我一直在使用这些方法来计算工作表中的行数

getLastRowNum() 

 getPhysicalNumberOfRows() 

他们在我的两本工作簿上工作的很好。 但是包含5行的第三张表格会返回1个额外的两个函数。

 Sheet NumberofRows getLastRowNum() getPhysicalNumberOfRows() 1 9 9 10 2 56 56 57 3 5 4 5 

这两个函数的工作方式究竟有什么不同,我该怎么做才能获得可靠的正确结果?

getLastRowNum()

  • 此工作表中包含的最后一行的编号,基于零
    即,如果n是行数,就像数组一样,从0开始到n-1。

getPhysicalNumberOfRows()

  • 此表中物理定义的行数

因此,对于第10行, getLastRowNum()将为9因为0是第一个索引,而9是最后一个。
这是使用getPhysicalNumberOfRows()而不是getLastRowNum()原因之一,因为如果表中的行数为1,则getLastRowNum()将返回0 ,如果存在0行或唯一行在位置0getPhysicalNumberOfRows()将返回1。

我发现内置的方法是不可靠的(不一致+/- 1),所以我推出了自己的:

 // returns index of next blank line public static int getNextRow(Sheet sheet) { int rowIndex = 0; Row row = sheet.getRow(rowIndex); Cell c = null; try { c = row.getCell(0); } catch (Exception e) { return rowIndex; } while (!emptyCell(c)) { rowIndex++; row = sheet.getRow(rowIndex); if (row != null) { c = row.getCell(0); } else { break; } } return rowIndex; }