Java 如何使用POI库获取Excel文件中的行数?
伙计们,我目前正在使用POI 3.9库来处理excel文件。我知道Java 如何使用POI库获取Excel文件中的行数?,java,excel,apache-poi,poi-hssf,Java,Excel,Apache Poi,Poi Hssf,伙计们,我目前正在使用POI 3.9库来处理excel文件。我知道getLastRowNum()函数,它返回Excel文件中的许多行 唯一的问题是getLastRowNum()返回一个计数从0开始的数字 因此,如果Excel文件使用前3行,getLastRowNum()返回2。 如果Excel文件只有一行,getLastRowNum()返回0 当Excel文件完全为空时会出现问题getLastRowNum()仍然返回0,因此我无法确定Excel文件是否有1行数据,或者是否为空 那么,如何检测Ex
getLastRowNum()
函数,它返回Excel文件中的许多行
唯一的问题是getLastRowNum()
返回一个计数从0开始的数字
因此,如果Excel文件使用前3行,getLastRowNum()
返回2。
如果Excel文件只有一行,getLastRowNum()
返回0
当Excel文件完全为空时会出现问题getLastRowNum()
仍然返回0,因此我无法确定Excel文件是否有1行数据,或者是否为空
那么,如何检测Excel文件是否为空呢?如果进行检查,请尝试
if
(getLastRowNum()<1){
res="Sheet Cannot be empty";
return
}
if
(getLastRowNum()您可以做两件事
使用
或
他们之间有细微的差别
选项1给出了实际填充内容的列数(如果10列中的第2列未填充,则得到9列)
选项2只提供最后一列的索引。因此完成了“getLastCellNum()”
由于
Sheet.getPhysicalNumberOfRows()
不计算空行,并且Sheet.getLastRowNum()
在有一行或无行时都返回0,因此我使用这两种方法的组合来精确计算总行数
int rowTotal = sheet.getLastRowNum();
if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) {
rowTotal++;
}
注意:这会将只有一个空行的电子表格视为没有,但对于大多数情况,这可能是可以的。若要查找最后一个数据行,请在excel中创建表格模板,其中部分填充了表格,或在两行之间填充了表格。 逻辑: getLastRowNum()返回最后一行的索引 所以,如果您想知道行的总数=getLastRowNum()+1 我希望这能奏效
int rowTotal = sheet.getLastRowNum() +1;
Sheet.getPhysicalNumberOfRows()
不涉及一些空行。
如果要对所有行进行循环,请不要使用它来知道循环大小。+1 Marcias。如果只需按Delete键删除单元格,则行在物理上仍然存在,并返回旧计数。我认为,如果要对实际具有非空值的行进行计数,则需要自己对其进行迭代。我将我不确定,但我知道这个方法返回的行数有点“声明”。警告:如果工作表中有空行,则getPhysicalNumberOfRows不会将它们包含在它返回的计数中。但是,getLastRowNum也会完全按照tin上的说明进行操作。因此,要迭代所有行,需要在迭代循环中使用getLastRowNum+1作为上限-注意处理可能不存在的行。注意:它是基于零的。因此当没有列或只有1(在您的情况下为标题)时,
getLastRowNum()
将返回0。因此,为了检查是否有行,也应该使用getPhysicalNumberOfRows()
。此外,还应该包含有关此主题的更多内容。
int noOfColumns = sh.getRow(0).getLastCellNum();
int rowTotal = sheet.getLastRowNum();
if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) {
rowTotal++;
}
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++;
}
int rowTotal = sheet.getLastRowNum() +1;