Java读取Excel

org.apache.poi 相关问题

poi读取Excel文件,为什么被删除掉内容的空行,仍然会被识别呢?

       XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fileInputStream);
       XSSFSheet sheet = xssfWorkbook.getSheetAt(1);
       //比如我获取最后一行行号,被删除掉内容的行,然后会被识别。
       int maxRow = sheet.getLastRowNum();

请求各位指教。

这是因为poi在读取Excel文件时,对于每个单元格,它不仅会检查其值是否为空,还会检查单元格是否为“真正”的空单元格。如果一个单元格的值是空字符串或null,但单元格中仍然包含格式、边框、颜色等其他属性,那么这个单元格仍然会被识别为非空单元格。

如果你想要过滤掉被删除掉内容的空行,你可以在读取Excel文件之后,对每一行进行遍历,判断该行所有单元格是否都为空。如果存在非空单元格,则将该行过滤掉。如果所有单元格都为空,则可以保留该行或者根据需要进行其他处理。

以下是一个示例代码片段,用于读取Excel文件并过滤掉被删除掉内容的空行:

java

 
// 创建Workbook对象  
Workbook workbook = WorkbookFactory.create(new File("example.xlsx"));  
  
// 获取Sheet对象  
Sheet sheet = workbook.getSheetAt(0);  
  
// 遍历每一行  
for (Row row : sheet) {  
    // 判断该行所有单元格是否都为空  
    boolean isBlankRow = true;  
    for (Cell cell : row) {  
        if (cell.getCellType() != CellType.BLANK) {  
            isBlankRow = false;  
            break;  
        }  
    }  
      
    // 如果该行所有单元格都为空,则过滤掉该行  
    if (isBlankRow) {  
        continue;  
    }  
      
    // 如果需要进行其他处理,可以在这里进行操作  
    // ...  
}


当你用Apache POI库读取Excel文件的时厚,getLastRowNum()方法返回的是最后一行的索引,又不是实际的行数
所以就算你Excel文件中存在被删除内容的空行,这些行的索引也是会被计算在getLastRowNum()的结果中