我是 Apache POI 新手,我需要根据数据库的内容写入 Excel 文件。但是,当数据库中存在空/空字段时,将为该特定字段引发空指针异常。我一直在阅读有关丢失单元策略的内容,这是解决此问题的最佳方法吗?为了简洁起见,我省略了很多代码,但下面是关键部分。例如,如果数据库中的actualAmountReturned为空,则会抛出NPE。
List<CaseData> cases = (List<CaseData>) model.get("cases");
int rowCount = 1;
for (CaseData pieCase : cases) {
Row userRow = sheet.createRow(rowCount++);
userRow.createCell(0).setCellValue(pieCase.getCaseId());
userRow.createCell(1).setCellValue(pieCase.getAcknowledgementReceivedDate());
userRow.createCell(2).setCellValue(pieCase.getActualAmountReturned());
}
最佳答案
只有两个Cell当给定值为 null 时,.setCellValue
方法将抛出 NPE
。这是仅有的两个将原始数据类型作为 value
参数的参数,但您放置了适当的对象包装类,因此需要拆箱。这是Cell.setCellValue(boolean value)和 Cell.setCellValue(double value) 。
这是因为对于 null
,从 Boolean
到 boolean
以及 Double
到 double
的拆箱失败.
例如
Boolean value = null;
cell.setCellValue(value); //NPE because unboxing `Boolean` to `boolean` fails
和
Double value = null;
cell.setCellValue(value); //NPE because unboxing `Double` to `double` fails
所有其他采用非原始数据类作为value
参数的Cell.setCellValue
方法都会在给出null
时简单地创建空白单元格。
因此,如果 pieCase.getActualAmountReturned()
返回 Double
,则
...
if (pieCase.getActualAmountReturned() == null) {
userRow.createCell(2).setBlank();
} else {
userRow.createCell(2).setCellValue(pieCase.getActualAmountReturned());
}
...
关于java - Apache POI - 处理空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58919392/