我正在使用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);
答案 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个结果。