在尝试通过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。我无法解决这个问题。
答案 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"
吗?