如何使用POI检查Excel单元格是否为空。

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (33)

我使用Poi.jar从Excel表中获取输入,并想知道如何检查单元格是否为空。

现在我正在使用下面的代码。

cell = myRow.getCell(3);
if (cell != null) {
    cell.setCellType(Cell.CELL_TYPE_STRING);

    //System.out.print(cell.getStringCellValue() + "\t\t");
    if (cell.getStringCellValue() != "")
        depend[p] = Integer.parseInt(cell.getStringCellValue());

    }
}

有人能指点我吗?

提问于
用户回答回答于

但如果你假设如果单元格包含空字符串,则单元格也为空。(“”),你需要一些额外的代码。如果没有正确清除单元格,就会发生这种情况(关于如何做到这一点,请参阅下面的进一步内容)。

我给自己写了一个来检查XSSFCell为空(包括空字符串)。

 /**
 * Checks if the value of a given {@link XSSFCell} is empty.
 * 
 * @param cell
 *            The {@link XSSFCell}.
 * @return {@code true} if the {@link XSSFCell} is empty. {@code false}
 *         otherwise.
 */
public static boolean isCellEmpty(final XSSFCell cell) {
    if (cell == null || cell.getCellType() == Cell.CELL_TYPE_BLANK) {
        return true;
    }

    if (cell.getCellType() == Cell.CELL_TYPE_STRING && cell.getStringCellValue().isEmpty()) {
        return true;
    }

    return false;
}

这个JUnit测试显示了需要额外的空检查的情况。

场景:在Java程序中更改单元格的内容。稍后,在同一个Java程序中,将检查单元格是否为空。如果isCellEmpty(XSSFCell cell)函数不检查空字符串。

@Test
public void testIsCellEmpty_CellHasEmptyString_ReturnTrue() {
    // Arrange
    XSSFCell cell = new XSSFWorkbook().createSheet().createRow(0).createCell(0);

    boolean expectedValue = true;
    boolean actualValue;

    // Act
    cell.setCellValue("foo");
    cell.setCellValue("bar");
    cell.setCellValue("");
    actualValue = isCellEmpty(cell);

    // Assert
    Assert.assertEquals(expectedValue, actualValue);
}

以防万一,如果有人想知道,如何正确清除单元格的内容。有两种方法可以存档(我建议方法1)

// way 1
public static void emptyCell(final XSSFCell cell) {
    cell.setCellType(Cell.CELL_TYPE_BLANK);
}

// way 2
public static void emptyCell(final XSSFCell cell) {
    String nullString = null;
    cell.setCellValue(nullString);
}
用户回答回答于

不如:

 Cell c = row.getCell(3);
 if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK) {
    // This cell is empty
 }

扫码关注云+社区