Apache POI 查找工作表中行数

10

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

getLastRowNum()

getPhysicalNumberOfRows()

它们在我的工作簿的两个表格上运行良好。但是第三个表格包含5行,在这两个函数中返回了1个额外的行。

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

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

2个回答

12

getLastRowNum()

  • 返回该工作表中最后一行的编号从零开始计数

例如,如果n是行数,则它类似于数组,从0到n-1开始计数。

getPhysicalNumberOfRows()

  • 返回物理上定义的行数,不包括空行。

因此,对于有10行的情况,getLastRowNum()将为9,因为它从0开始计数。
这是使用getPhysicalNumberOfRows()而不是getLastRowNum()的原因之一,因为如果工作表中只有1行,则getLastRowNum()将返回0,无法区分是否存在0行或唯一的行位于位置0,而getPhysicalNumberOfRows()将返回1。


但是就像我之前提到的,对于行数为9,getPhysicalNumberOfRows返回的是10。而且并不是所有情况下都会将数字加1。 - tanvi
你能否检查一下表格的开头,第一行;是否有任何空白行或未使用的行等等,如果可能的话请分享 xls 文件。 - thepace
检查是否有隐藏的行,或者是否有标题,或者您可能已经输入了最后一列的内容。清除所有内容并尝试。这可能会有所帮助。 - thepace
找不到任何东西。我甚至创建了一个新的工作簿。结果还是一样! - tanvi
无法分享xls文件,但我正在使用的poi版本是3.10。 - tanvi
显示剩余4条评论

3
我发现内置方法不可靠(偏差不一致,有时偏高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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接