2012-04-01 153 views
6

我正在使用Apache POI java并希望获得非空行的总数。我成功处理了所有列的整行。现在我假设我得到一个有多行而不是单行的Excel表格......那么怎么去做呢?我正在考虑获取总行数(int n),然后循环,直到我< = n但不确定。Apache POI行号

建议最受欢迎:)

注意: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); 
+1

你究竟做了什么,什么不工作?你能提供一些代码吗? – nansen 2012-04-01 11:22:16

+1

这不是很好,但我想这是如何做到的。您可以直接在foreach循环中使用HSSFSheet,因为它实现了Iterable 。他们不把它称为可怕的扩展表格格式(HSSF),因为它没有任何内容(或许你得到的是20,而不是预期的5行,因为你的行有空值,你必须迭代单元格并跳过所有的行只有空值 – nansen 2012-04-01 11:38:55

+0

我想我解决了它...因为我已经在Excel表格中下拉菜单,所以这些列表中的某个地方存在,现在它正在工作并显示正确的行号 – 2012-04-01 11:55:22

回答

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

什么是tempRow here。 – DEADEND 2017-07-05 04:28:12

+0

它只是一个变量,你可以忽略它。 – Sorter 2017-07-05 07:01:34

5

的问题是,POI认为空行物理行是不可能的。这种情况有时在Excel中发生,虽然它们不可见,但行肯定存在。

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

0

您可能想getPhicalicalNumberOfRows()以外的getLastRowNum()?

0

您可以通过它不是空的使用此行迭代:

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

感谢

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

这种方法会给你,你可能必须填写该行的最后一排数,甚至如果您填充了5行,则可能会出现这种情况,您可能会在剩余的15行或第21行中填充一些空格,因为它会将最后一行数字设置为20.

可能会出现这样的情况,即在第5行中输入数据(从1开始),然后第5个条目将在第21行中,所以如果使用此方法,则会得到20个结果。