我发现了一个奇怪的解析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并粘贴特殊而只检查格式到失败列时,它将解析好。
是什么原因?
答案 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);
}
这将处理空单元格,空单元格,并为您提供格式化数字单元格的字符串