目前我使用的POI库3.9与家伙Excel文件的工作。 我知道的getLastRowNum()
函数,该函数返回一个Excel文件中的行数。
唯一的问题是getLastRowNum()
返回一个数从0开始计数。
因此,如果一个Excel文件使用第3行, getLastRowNum()
返回2.如果一个Excel文件刚刚1行, getLastRowNum()
返回0。
当Excel文件是完全空的,会出现问题。 getLastRowNum()
仍返回0,所以我不能确定是否Excel文件具有1行的数据,或者如果它是空的。
所以,我怎么能检测如果一个Excel文件为空或不?
尝试Sheet.getPhysicalNumberOfRows()
如果你做一个检查
if
(getLastRowNum()<1){
res="Sheet Cannot be empty";
return
}
这将确保你至少有一个排,除了报头数据。 下面是我的程序工作正常。 Excel文件有三列IE浏览器。 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;
}
有两件事情可以做
使用
int noOfColumns = sh.getRow(0).getPhysicalNumberOfCells();
要么
int noOfColumns = sh.getRow(0).getLastCellNum();
他们之间的罚款差异
选项1给出了实际上充满了内容列没有(如果10列的第2列不填充你会得到9)
选项2只是给你最后一列的索引。 因此,做'getLastCellNum()'
由于Sheet.getPhysicalNumberOfRows()
不计空行和Sheet.getLastRowNum()
返回0二者是否有一排或没有行,我使用这两种方法的组合,以精确地计算出的行的总数。
int rowTotal = sheet.getLastRowNum();
if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) {
rowTotal++;
}
注意:这将把一个电子表格,一个空行具有没有,但在大多数情况下这可能是好的。
为了找到最后一个数据行,如果你在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++;
}