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

时间:2013-04-26 10:41:43

标签: java excel apache-poi poi-hssf

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

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

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

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

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

7 个答案:

答案 0 :(得分:71)

答案 1 :(得分:2)

如果你做了检查

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

这将确保您至少有一行包含除标题之外的数据。以下是我的程序工作正常。 Excel文件有三列即。 ID,NAME,LASTNAME

XSSFWorkbook workbook = new XSSFWorkbook(inputstream);
        XSSFSheet sheet = workbook.getSheetAt(0);
        Row header = sheet.getRow(0);
        int n = header.getLastCellNum();
        String header1 = header.getCell(0).getStringCellValue();
        String header2 = header.getCell(1).getStringCellValue();
        String header3 = header.getCell(2).getStringCellValue();
        if (header1.equals("ID") && header2.equals("NAME")
                && header3.equals("LASTNAME")) {
            if(sheet.getLastRowNum()<1){
                System.out.println("Sheet empty");
                         return;
            }   
                        iterate over sheet to get cell values
        }else{
                          SOP("invalid format");
                          return;
                          }

答案 2 :(得分:1)

你可以做两件事

使用

int noOfColumns = sh.getRow(0).getPhysicalNumberOfCells();

int noOfColumns = sh.getRow(0).getLastCellNum();

他们之间存在细微差别

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

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

答案 3 :(得分:1)

由于Sheet.getPhysicalNumberOfRows()不计算空行,Sheet.getLastRowNum()返回0,如果有一行或没有行,我会使用这两种方法的组合来准确计算总行数。 / p>

int rowTotal = sheet.getLastRowNum();

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

注意:这会将一个空行的电子表格视为没有,但在大多数情况下这可能没问题。

答案 4 :(得分:0)

要查找最后一个数据行,以防您在excel中创建了表格模板,其中部分填充或表格之间的行为空。 逻辑:

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++;
}

答案 5 :(得分:0)

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

因此,如果您想知道总行数= getLastRowNum()+1。

我希望这会起作用。

int rowTotal = sheet.getLastRowNum() +1;

答案 6 :(得分:0)

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