由poi解析Excel并且目标单元格为空有时解析确定有时会抛出nullpointexception

时间:2015-11-25 13:51:18

标签: apache-poi

我发现了一个奇怪的解析poi的现象。见代码

goods.subtitle = row.getCell(headerNameIndexMap.get("subtitle")).getStringCellValue();

解析字幕列并将值设置为object。有两个excel,两个字幕列都是空的,但解析其中一个是ok,只是subtitle属性为null,但是当解析另一个excel时,它抛出异常:

java.lang.NullPointerException

将成功excel中的某个相同名称列复制到excel失败后,在解析失败列之前可以解析ok,但突然失败excel中的非空列突然解析失败,抛出NullPointException。然后从成功excel复制相同的名称列到excel失败,现在失败的excel可以成功解析。

如果我将解析后的失败列从fail excel复制到成功excel,它仍然会解析失败。但是当复制另一列成功excel并粘贴特殊而只检查格式到失败列时,它将解析好。

是什么原因?

1 个答案:

答案 0 :(得分:1)

根据Apache POI JavaDocs, Row.getCell(int)可能会返回Null。空单元格是没有值且没有样式的单元格,因此不会记录在文件

因此,对于空单元格以及空白单元格(以前保留值但不再存在)以及数字单元格,您的代码将失败。所以,坦率地说,大多数情况......

您应该将代码更改为更像这样:

DataFormatter formatter = new DataFormatter();

Cell cell = row.getCell(headerNameIndexMap.get("subtitle"), Row.    RETURN_BLANK_AS_NULL);
if (cell == null) {
   // No value here, handle
} else {
   String subtitle = formatter.formatCellValue(cell);
}

这将处理空单元格,空单元格,并为您提供格式化数字单元格的字符串