首页 文章

Apache POI行号

提问于
浏览
7

我正在使用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
    worksheet.getLastRownNum() // *base index 0*
    

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

    可能存在这样的情况:在每第5行输入数据(从1开始),然后您的第5行将在第21行,所以再次,如果您使用此方法,您将获得20个结果 .

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

    问题是POI将空行视为物理行 . 这种情况有时会发生在Excel中,虽然它们对眼睛不可见,但行确实存在 .

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

  • 5

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

  • 0

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

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

    谢谢

相关问题