当前位置: 首页 > 知识库问答 >
问题:

Apache POI-处理空字段

雍俊远
2023-03-14

我是Apache POI的新手,我需要根据数据库的内容编写excel文件。但是,当DB中有一个空/空字段时,会为该特定字段抛出一个空指针异常。我一直在读关于缺失的小区政策,这是解决这个问题的最好方法吗?为了简洁,我省略了很多代码,但下面是关键部分。例如,如果DB中的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());
}

共有1个答案

阙佐
2023-03-14

只有两个Cell.SetCellValue方法,当给定值为NULL时,它们将抛出NPE。这是仅有的两个将原始数据类型作为value参数的方法,但您要放置适当的对象包装类,因此需要取消装箱。这是Cell.SetCellValue(布尔值)和Cell.SetCellValue(双值)。这是因为对于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

因此,如果piecase.getActualAmountReturned()返回一个double,则

...
if (pieCase.getActualAmountReturned() == null) {
 userRow.createCell(2).setBlank();
} else {
 userRow.createCell(2).setCellValue(pieCase.getActualAmountReturned());
}
...
 类似资料:
  • 在运行中,模板中的 空白 处理在某种程度上来说是纠缠所有模板引擎的一个问题。 我们来看这个模板。我已经用颜色标记了模板中的组件: 文本, 插值, FTL 标签.。 使用 [BR] 来想象 换行。 <p>List of users:[BR] <#assign users = [{"name":"Joe", "hidden":false},[BR] {

  • 问题内容: 我有一个包含3列的表格:c1,c2和c3。我想编写一条select语句,以便如果c1和c2都为空,则显示c3,否则显示c1。 在上述情况下,编写select语句的最佳方法是什么? 问题答案: 使用案例 使用NVL2 或者 使用解码 易读性和易用性CASE胜出。

  • 我无法让JsonDeserializer处理空值。我正在读取一个json文件,其中我的记录类型只有四个值:Case 1、Case 2、*或null。JsonDeserializer可以很好地处理前3个。但是,遇到null时它似乎什么也做不了。根据代码(请参阅下面我的自定义反序列化器),我希望该行 要么抛出一个异常(从而将text = "NULL "赋值)。或者,根据返回一个空字符串 同样,我在这里

  • 以下代码正在为空的属性抛出NPE。class Person有属性:string:name,Integer:age,Integer:salary此处可以为空。我想创建一个工资列表。 在这里,我必须在结果列表中保留空值。null不能替换为0。

  • white-space属性用来设置文本内空白符(如空格、回车、tab字符等)的处理方式,可选值有 normal | pre | nowrap | pre-wrap | pre-line,默认值为 normal。该属性出自 CSS1,在 CSS 2.1中新增了属性值 pre-wrap 和 pre-line。不同取值的含义见表 3‑6: 表 3‑6 white-space属性的取值及含义 属性值 含义

  • 我使用的是Spring批处理4.3.2。.我正在写测试,发现了一些奇怪的东西,签出下面的代码。 对于相同的jobexecutions,我会得到不同的“getStepExecutions()”结果,这取决于我获取它们的方式。你知道为什么会这样吗?还是我做错了什么? 干杯T