伙计我目前正在使用POI 3.9库来处理excel文件。我知道getLastRowNum()
函数,它在Excel文件中返回许多行。
唯一的问题是getLastRowNum()
返回一个从0开始计数的数字。
因此,如果Excel文件使用前3行,getLastRowNum()
将返回2。
如果Excel文件只有1行,getLastRowNum()
将返回0。
当Excel文件完全为空时,会出现问题。 getLastRowNum()
仍然返回0,因此我无法确定Excel文件是否有1行数据,或者是否为空。
那么如何检测Excel文件是否为空?
答案 0 :(得分:71)
答案 1 :(得分:2)
如果你做了检查
if
(getLastRowNum()<1){
res="Sheet Cannot be empty";
return
}
这将确保您至少有一行包含除标题之外的数据。以下是我的程序工作正常。 Excel文件有三列即。 ID,NAME,LASTNAME
XSSFWorkbook workbook = new XSSFWorkbook(inputstream);
XSSFSheet sheet = workbook.getSheetAt(0);
Row header = sheet.getRow(0);
int n = header.getLastCellNum();
String header1 = header.getCell(0).getStringCellValue();
String header2 = header.getCell(1).getStringCellValue();
String header3 = header.getCell(2).getStringCellValue();
if (header1.equals("ID") && header2.equals("NAME")
&& header3.equals("LASTNAME")) {
if(sheet.getLastRowNum()<1){
System.out.println("Sheet empty");
return;
}
iterate over sheet to get cell values
}else{
SOP("invalid format");
return;
}
答案 2 :(得分:1)
你可以做两件事
使用
int noOfColumns = sh.getRow(0).getPhysicalNumberOfCells();
或
int noOfColumns = sh.getRow(0).getLastCellNum();
他们之间存在细微差别
选项1给出实际填充内容的列数(如果未填充10列的第2列,则会得到9)
选项2只提供最后一列的索引。因此完成了'getLastCellNum()'
答案 3 :(得分:1)
由于Sheet.getPhysicalNumberOfRows()
不计算空行,Sheet.getLastRowNum()
返回0,如果有一行或没有行,我会使用这两种方法的组合来准确计算总行数。 / p>
int rowTotal = sheet.getLastRowNum();
if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) {
rowTotal++;
}
注意:这会将一个空行的电子表格视为没有,但在大多数情况下这可能没问题。
答案 4 :(得分:0)
要查找最后一个数据行,以防您在excel中创建了表格模板,其中部分填充或表格之间的行为空。 逻辑:
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++;
}
答案 5 :(得分:0)
getLastRowNum()返回最后一行的索引。
因此,如果您想知道总行数= getLastRowNum()+1。
我希望这会起作用。
int rowTotal = sheet.getLastRowNum() +1;
答案 6 :(得分:0)
Sheet.getPhysicalNumberOfRows()
不涉及一些空行。
如果要循环所有行,请不要使用它来知道循环大小。