如何使用POI库获取Excel文件中的行数?

伙计们我正在使用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 } 

这将确保您至less有一行数据除了标题。 以下是我的程序工作正常。 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; } 

有两件事你可以做

使用

 int noOfColumns = sh.getRow(0).getPhysicalNumberOfCells(); 

要么

 int noOfColumns = sh.getRow(0).getLastCellNum(); 

他们之间有一个很好的区别

  1. 选项1给出了实际填充内容的列号(如果10列的第二列未填满,则会得到9)

  2. 选项2只是给你最后一列的索引。 因此完成'getLastCellNum()'

由于Sheet.getPhysicalNumberOfRows()不计算空行,而Sheet.getLastRowNum()返回0,如果有一行或不行,我使用这两种方法的组合来精确计算总行数。

 int rowTotal = sheet.getLastRowNum(); if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) { rowTotal++; } 

注意:这将把一个空行的电子表格视为没有,但对于大多数目的这可能是好的。