我是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)
这是因为BooleanbooleanDouble以及从doublenull的拆箱失败。

例如

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/

10-11 03:42