java - Apache POI - 处理空字段

标签 java apache-poi

我是 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,从 Booleanboolean 以及 Doubledouble 的拆箱失败.

例如

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/

相关文章:

java - 用户登录后访问登录页面,如何重定向到首页?

java - 记录 jsf 页面请求的 IP 地址

java - 我可以在 Controller 的父抽象类中使用 ModelAttribute 吗

java - 我的 ArrayList 打印同一个对象两次

java - Apache POI getStringCellValue() 打印 null

java - 如何使用 Java POI 从工作簿中删除所有公式

java - genAESKeyFromPW() 但在 Java 中

java - Java Map 键的奇怪输出

java - 如何使用 Apache POI 为整行应用粗体文本样式?

新计算机上 DDE 中的 Java 编译器错误,在旧计算机上工作正常