首页 > 解决方案 > Apache POI - 缺少单元策略

问题描述

我正在使用基于我的数据库内容的 Apache POI 写入 Excel。我有下面的代码可以正常工作,如果我的数据库中的单元格为空,那么它在 Excel 单元格中将其设置为空白。

但是,因为我有几个 if else 语句,所以它的 Sonar Lint 分析失败(需要降低认知复杂性,这意味着我需要删除一些 if else 语句)。我只需要应用这些检查DoubleObject类型。

经过一些研究,我认为解决此问题的最佳方法是创建一个缺失的单元格策略(将 null 创建为空白),但我发现很难说该字段是否为 null 然后setCellValueas missingCellPolicy

我怎样才能做到这一点?

List<CaseData> cases = (List<CaseData>) model.get("cases");
    Sheet sheet = workbook.createSheet("PIE Cases");

int rowCount = 1;
    for (CaseData pieCase : cases) {
        Row userRow = sheet.createRow(rowCount++);

if (pieCase.getActualAmountReturned() == null) {
            userRow.createCell(2).setBlank();
        } else {
            userRow.createCell(2).setCellValue(pieCase.getActualAmountReturned());
        }
if (pieCase.getChannel() == null) {
            userRow.createCell(9).setBlank();
        } else {
            userRow.createCell(9).setCellValue(pieCase.getChannel().getChannel());
        }

标签: javaexcelapache-poi

解决方案


你可以这样做,会很好

List<CaseData> cases = (List<CaseData>) model.get("cases");
    Sheet sheet = workbook.createSheet("PIE Cases");

int rowCount = 1;
    for (CaseData pieCase : cases) {
        Row userRow = sheet.createRow(rowCount++);

if (pieCase.getActualAmountReturned() != null) {
           userRow.createCell(2).setCellValue(pieCase.getActualAmountReturned());
}
if (pieCase.getChannel() != null) {
            userRow.createCell(9).setCellValue(pieCase.getChannel().getChannel());
}

推荐阅读