我是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());
}
最佳答案
当给定值为.setCellValue
时,只有两个Cell NPE
方法将抛出null
。这是仅有的两个将原始数据类型用作value
参数的参数,但是您放置了适当的对象包装器类,因此需要拆箱。这是Cell.setCellValue(boolean value)和Cell.setCellValue(double value)。
这是因为Boolean
从boolean
到Double
以及从double
到null
的拆箱失败。
例如
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
给定
Cell.setCellValue
时,将非原始数据类作为value
参数的所有其他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/