[alibaba/easyexcel]Excel采用填充的有合并单元格的问题,设置【 .forceNewRow(Boolean.TRUE) 】填充多个列表时有空行

2024-05-16 140 views
5

Excel模板

image

填充后的Excel文件

image

代码调式

image

image

@GetMapping("/export")
    public void export(@RequestParam Long id, HttpServletResponse response) {

        /*try {
            performancePersonalService.exportPerformancePersonal(response, id, this.getWorkContext());
        } catch (Exception e) {
            log.error("导出员工个人绩效时异常,原因为:" + e.getMessage());
        }*/
        WorkContext workContext = getWorkContext();
        PerformancePersonalDetailsDTO performanceModel = performancePersonalService.getPerformanceById(id, workContext);

        if (performanceModel == null) {
            return;
        }

        PerformancePersonalExcelDTO performancePersonalExcelDTOS = ExcelUtil.convertExcelDto(performanceModel);
        String fileName = String.format("%s_%s.xlsx", performanceModel.getSelfName(), performanceModel.getName());

        try {
            ByteArrayOutputStream stream = ExcelUtil.getPerformancePersonalFileStream(performancePersonalExcelDTOS);
            //下载文件
            WebUtil.downloadFile(response, fileName, stream);
        } catch (Exception e) {
            HRBizExpcetion.isTrue(true, "导出excel文件时异常,原因为: " + e.getMessage());
        }
    }

public static ByteArrayOutputStream getPerformancePersonalFileStream(PerformancePersonalExcelDTO item) throws IOException {
        String templateFileName = getPerformancePersonalTemplateFullPath();

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        ExcelWriter excelWriter = EasyExcel.write(stream).withTemplate(templateFileName).build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
        if (Utils.isNotEmptyList(item.getKpis())) {
            excelWriter.fill(item.getKpis(), fillConfig, writeSheet);
        }
        if (Utils.isNotEmptyList(item.getCores())) {
            excelWriter.fill(item.getCores(), fillConfig, writeSheet);
        }
        Map<String, Object> map = item.getMap();
        excelWriter.fill(map, writeSheet);
        excelWriter.finish();
        return stream;
    }

## PerformancePersonalExcelDTO 
@Getter
@FieldDefaults(level = AccessLevel.PRIVATE)
public class PerformancePersonalExcelDTO {

    private Map<String, Object> map = new HashMap<>();
    List<PerformancePersonalExcelKPIDTO> kpis = new ArrayList();
    List<PerformancePersonalExcelCoreDTO> cores = new ArrayList();

    /**
     * 标题
     */
    public void setTitle(String title) {
        map.put("title", title);
    }

    /**
     * 部门
     */
    public void setDeptName(String deptName) {
        map.put("deptName", deptName);
    }

    /**
     * kpi自评分
     */
    public void setKpiScoreSelfTotal(BigDecimal kpiScoreSelfTotal) {
        map.put("kpiScoreSelfTotal", kpiScoreSelfTotal);
    }

    /**
     * kpi上级评分
     */
    public void setKpiLeaderScoreTotal(BigDecimal kpiLeaderScoreTotal) {
        map.put("kpiLeaderScoreTotal", kpiLeaderScoreTotal);
    }

    /**
     * 核心价值观自评分
     */
    public void setCoreScoreSelfTotal(BigDecimal coreScoreSelfTotal) {
        map.put("coreScoreSelfTotal", coreScoreSelfTotal);
    }

    /**
     * 核心价值观上级评分
     */
    public void setCoreLeaderScoreTotal(BigDecimal coreLeaderScoreTotal) {
        map.put("coreLeaderScoreTotal", coreLeaderScoreTotal);
    }

    /**
     * 直接上级评语
     */
    public void setLeaderComment(String leaderComment) {
        map.put("leaderComment", leaderComment);
    }

    /**
     * 直接上级名称
     */
    public void setLeaderName(String leaderName) {
        map.put("leaderName", leaderName);
    }

    /**
     * 直接上级建议发展计划
     */
    public void setLeaderAdvisePlan(String leaderAdvisePlan) {
        map.put("leaderAdvisePlan", leaderAdvisePlan);
    }

    /**
     * 中心负责人名称
     */
    public void setMasterName(String masterName) {
        map.put("masterName", masterName);
    }

    /**
     * 中心负责评语
     */
    public void setMasterComment(String masterComment) {
        map.put("masterComment", masterComment);
    }
}

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class PerformancePersonalExcelKPIDTO {
    /**
     * 行号
     */
    int num1;

    /**
     * 工作事项
     */
    String name1;

    /**
     * 绩效标准
     */
    String core1;

    /**
     * 权重
     */
    float weightPercent1;

    /**
     * 目标
     */
    String targetDesc1;

    /**
     * 计算公式
     */
    String formulaDesc1;

    /**
     * 数据来源
     */
    String dataSource1;

    /**
     * 员工自评分
     */
    float selfScore1;

    /**
     * 上级评分
     */
    float leaderScore1;

}

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class PerformancePersonalExcelCoreDTO {

    /**
     * 行号
     */
    int num2;

    /**
     * 工作事项
     */
    String name2;

    /**
     * 绩效标准
     */
    String core2;

    /**
     * 权重
     */
    float weightPercent2;

    /**
     * 目标
     */
    String targetDesc2;

    /**
     * 计算公式
     */
    String formulaDesc2;

    /**
     * 数据来源
     */
    String dataSource2;

    /**
     * 员工自评分
     */
    float selfScore2;

    /**
     * 上级评分
     */
    float leaderScore2;

}

提示的异常或者没有达到的效果

回答

0

版本为【 2.2.3 】的

5

使用【 public ExcelWriterBuilder withTemplate(InputStream templateInputStream) public ExcelWriterBuilder withTemplate(File templateFile) 】均报错,

7

自己解决