Java 如何使用POI库获取Excel文件中的行数?

Java 如何使用POI库获取Excel文件中的行数?,java,excel,apache-poi,poi-hssf,Java,Excel,Apache Poi,Poi Hssf,伙计们,我目前正在使用POI 3.9库来处理excel文件。我知道getLastRowNum()函数,它返回Excel文件中的许多行 唯一的问题是getLastRowNum()返回一个计数从0开始的数字 因此,如果Excel文件使用前3行,getLastRowNum()返回2。 如果Excel文件只有一行,getLastRowNum()返回0 当Excel文件完全为空时会出现问题getLastRowNum()仍然返回0,因此我无法确定Excel文件是否有1行数据,或者是否为空 那么,如何检测Ex

伙计们,我目前正在使用POI 3.9库来处理excel文件。我知道
getLastRowNum()
函数,它返回Excel文件中的许多行

唯一的问题是
getLastRowNum()
返回一个计数从0开始的数字

因此,如果Excel文件使用前3行,
getLastRowNum()
返回2。 如果Excel文件只有一行,
getLastRowNum()
返回0

当Excel文件完全为空时会出现问题
getLastRowNum()
仍然返回0,因此我无法确定Excel文件是否有1行数据,或者是否为空

那么,如何检测Excel文件是否为空呢?

如果进行检查,请尝试

if
(getLastRowNum()<1){
 res="Sheet Cannot be empty";
return
}
if

(getLastRowNum()您可以做两件事

使用

他们之间有细微的差别

  • 选项1给出了实际填充内容的列数(如果10列中的第2列未填充,则得到9列)

  • 选项2只提供最后一列的索引。因此完成了“getLastCellNum()”

  • 由于
    Sheet.getPhysicalNumberOfRows()
    不计算空行,并且
    Sheet.getLastRowNum()
    在有一行或无行时都返回0,因此我使用这两种方法的组合来精确计算总行数

    int rowTotal = sheet.getLastRowNum();
    
    if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) {
        rowTotal++;
    }
    

    注意:这会将只有一个空行的电子表格视为没有,但对于大多数情况,这可能是可以的。

    若要查找最后一个数据行,请在excel中创建表格模板,其中部分填充了表格,或在两行之间填充了表格。 逻辑:

    getLastRowNum()返回最后一行的索引

    所以,如果您想知道行的总数=getLastRowNum()+1

    我希望这能奏效

    int rowTotal = sheet.getLastRowNum() +1;
    

    Sheet.getPhysicalNumberOfRows()
    不涉及一些空行。
    如果要对所有行进行循环,请不要使用它来知道循环大小。

    +1 Marcias。如果只需按Delete键删除单元格,则行在物理上仍然存在,并返回旧计数。我认为,如果要对实际具有非空值的行进行计数,则需要自己对其进行迭代。我将我不确定,但我知道这个方法返回的行数有点“声明”。警告:如果工作表中有空行,则getPhysicalNumberOfRows不会将它们包含在它返回的计数中。但是,getLastRowNum也会完全按照tin上的说明进行操作。因此,要迭代所有行,需要在迭代循环中使用getLastRowNum+1作为上限-注意处理可能不存在的行。注意:它是基于零的。因此当没有列或只有1(在您的情况下为标题)时,
    getLastRowNum()
    将返回0。因此,为了检查是否有行,也应该使用
    getPhysicalNumberOfRows()
    。此外,还应该包含有关此主题的更多内容。
    int noOfColumns = sh.getRow(0).getLastCellNum();
    
    int rowTotal = sheet.getLastRowNum();
    
    if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) {
        rowTotal++;
    }
    
    int count = 0;
    int emptyrow=0;
    int irow=0;
    while (rowIterator.hasNext()) {
        row = (Row) rowIterator.next();
        if (count != 0 && !checkIfRowIsEmpty(row)) { }
        else{
            if(count!=0 && emptyrow==irow){
                emptyrow++;
            }else{
                emptyrow=0;
                irow=0;
            }
        }
        if(emptyrow>0){
            irow++;
        }
        if(emptyrow>3){
            break;
        }
        count++;
    }
    
    int rowTotal = sheet.getLastRowNum() +1;