如何确定空行?

MyT*_*tle 27 java apache-poi

如何使用Apache POI确定.xls文档中的空行?

小智 33

我在我的POI项目中使用以下方法,它运行良好.这是zeller解决方案的变体.

public static boolean isRowEmpty(Row row) {
    for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) {
        Cell cell = row.getCell(c);
        if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK)
            return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)


Epi*_*rce 24

行迭代器仅返回包含数据的行,但是如果它们完全为空,则按行索引进行迭代,getRow(index) 返回null

解:

POI版本3.14(感谢Sergii Lisnychyi):

private boolean checkIfRowIsEmpty(Row row) {
    if (row == null) {
        return true;
    }
    if (row.getLastCellNum() <= 0) {
        return true;
    }
    for (int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++) {
        Cell cell = row.getCell(cellNum);
        if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK && StringUtils.isNotBlank(cell.toString())) {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

从POI版本3.15到4.2(int getCellType()不推荐使用):

    private boolean checkIfRowIsEmpty(Row row) {
    if (row == null) {
        return true;
    }
    if (row.getLastCellNum() <= 0) {
        return true;
    }
    for (int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++) {
        Cell cell = row.getCell(cellNum);
        if (cell != null && cell.getCellTypeEnum() != CellType.BLANK && StringUtils.isNotBlank(cell.toString())) {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

从POI版本4(CellTypeEnum getCellTypeEnum()将返回枚举不是int):

private boolean checkIfRowIsEmpty(Row row) {
    if (row == null) {
        return true;
    }
    if (row.getLastCellNum() <= 0) {
        return true;
    }
    for (int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++) {
        Cell cell = row.getCell(cellNum);
        if (cell != null && cell.getCellTypeEnum() != CellType.BLANK && StringUtils.isNotBlank(cell.toString())) {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

  • 从 POI 版本 3.15 到 4.2 cell.getCellTypeEnum() 不存在,可以使用 if (cell != null &amp;&amp; cell.getCellType() != Cell.CELL_TYPE_BLANK &amp;&amp; !cell.toString().isEmpty()) { return false ; } (3认同)

zel*_*ler 5

您必须遍历行中的所有单元格并检查它们是否全部为空.我不知道任何其他解决方案......

 short c;
 for (c = lastRow.getFirstCellNum(); c <= lastRow.getLastCellNum(); c++) {
     cell = lastRow.getCell(c);
     if (cell != null && lastRow.getCell(c).getCellType() != HSSFCell.CELL_TYPE_BLANK) {
          nonBlankRowFound = true;
     }
 }
Run Code Online (Sandbox Code Playgroud)

代码来自这里