Apache POI行号

时间:2012-04-01 11:12:07

标签: java apache-poi

我正在使用Apache POI java并希望获得非空的总行数。我用其所有列成功处理了整行。现在我假设我得到一个包含多行而不是一行的excel表...那么如何去做呢?我想要获得总行数(int n)然后循环直到i <= n但不确定。

建议最受欢迎:)

注意:Apache POI版本为3.8。我不是在处理Xlsx格式......只是xls。

是的,我尝试了这段代码,但得到了20秒......这是不可能的,因为我只有5行

FileInputStream fileInputStream = new FileInputStream("COD.xls");
            HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
            HSSFSheet worksheet = workbook.getSheet("COD");
            HSSFRow row1 = worksheet.getRow(3);
            Iterator rows = worksheet.rowIterator(); 
            int noOfRows = 0;
            while( rows.hasNext() ) {
                HSSFRow row = (HSSFRow) rows.next();
                noOfRows++;                
            }
            System.out.println("Number of Rows: " + noOfRows);

5 个答案:

答案 0 :(得分:6)

for (int i = 0; i <= sheet.getLastRowNum(); i++) {
    if ((tempRow = sheet.getRow(i)) != null) {
           //Your Code Here
    }
}

答案 1 :(得分:5)

问题是POI将空行视为物理行。这种情况有时会发生在Excel中,虽然它们看不到,但行确实存在。

如果您要打开Excel工作表并选择数据下方的所有内容,然后将其删除(我知道它看起来是空的,但无论如何都要这样做),POI将返回正确的数字。

答案 2 :(得分:1)

你可能想要除getLastRowNum()以外的getPhysicalNumberOfRows()吗?

答案 3 :(得分:0)

您可以使用以下方法迭代非空行:

Iterator<Row> rowIterator = sheet.rowIterator();
      while (rowIterator.hasNext()) {
        Row row = (Row) rowIterator.next();
        // Your code here
      }

由于

答案 4 :(得分:0)

worksheet.getLastRownNum() // *base index 0*

此方法将为您提供填充行的最后一个行号,即使您已填充5行,也可能存在您可能已填充剩余15行或第21行中的某些空格的情况,因为其中最后一行的编号为20。

可能会出现这样的情况,即每隔5行输入数据(从1开始),那么你的第5行将在第21行,所以再次,如果你使用这种方法,你将获得20个结果。