Apache POI getStringCellValue()打印null

时间:2016-04-21 18:26:44

标签: java apache-poi

在尝试通过Java中的Apache POI读取Cell值时,我遇到了一个奇怪的错误:

 System.out.println(row.getCell(13, Row.CREATE_NULL_AS_BLANK).getStringCellValue()) 

始终打印null,即使将缺失策略指定为Row.CREATE_NULL_AS_BLANK。我对Cell的写入逻辑是:

public void writeCell( String value, Sheet sheet, int rowNum, int colNum)
{
    Row row = sheet.getRow(rowNum);
    if (row == null)
    {
        row = sheet.createRow(rowNum);
    }
    Cell cell = row.createCell(colNum, Cell.CELL_TYPE_STRING);
    if (value == null)
    {
        return;
    }
    cell.setCellValue(value);
}

当我在colNum = 13处写入Cell时,String值对象为null。我无法解决这个问题。

2 个答案:

答案 0 :(得分:1)

这条线并没有像你认为的那样做:

System.out.println(row.getCell(13, Row.CREATE_NULL_AS_BLANK).getStringCellValue()) 

实际上,那就是

Cell cell = row.getCell(13);
if (cell == null) { cell = row.createCell(13, Cell.CELL_TYPE_BLANK); }

因此,如果该单元格中没有任何内容,则会将其创建为空白空白

然后,你尝试做:

 cell.getStringCellValue()

这仅适用于String单元格,在缺少的情况下,您已告知POI为您提供Blank个新单元格!

如果您真的只想要一个单元格的字符串值,请使用DataFormatter.formatCellValue(Cell) - 返回单元格的String表示形式,包括格式。否则,在尝试获取值之前检查单元格的类型!

答案 1 :(得分:0)

如果您的代码按预期工作(将呼叫设置为空白),Cell界面上的getStringCellValue()将返回""
col id 13的值不是null而是"null"吗?