easyexcel导出excel表格动态合并策略

背景

在业务开发过程中,出现如下需求:在一条记录中,存在多条内容数据,此时导出excel表格时,则需要对同一条记录中的数据进行处理。如下图
在这里插入图片描述

easyexcel的引入
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>easyexcel</artifactId>
	<version>2.2.3</version>
</dependency>
业务操作
  1. 响应vo的处理
    easyexcel导出excel表格,通常需要再响应的vo信息中添加对应的注解
    需要的导出的字段中,添加注解 @ExcelProperty(value = {“记录导出”, “工单号”}, index = 0)
    不需要导出的字段中,则添加忽略导出注解 @ExcelIgnore
  2. 导出数据处理
    在获取需要导出的数据时,如上图中,装载机4,内容项中存在两条数据,则装载机4需要生成两条内容项不同,其他相同的数据
  3. 构建合并策略方法
/**
     * 动态导出合并excel
     * @param response
     * @param data 导出的数据集合
     * @param tableName 导出的表名称
     * @param cls 响应的vo对应的cls
     * @param mergeRowIndex 需要合并的列
     * @param mergeColumeIndex 开始合并的行
     */
    public static void exportMergeExcel(HttpServletResponse response, List data, String tableName, Class cls,int mergeRowIndex, int[] mergeColumeIndex) {
        try {
            response.setContentType("application/vnd.ms-easyExcel");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-disposition", "attachment;filename="+ URLEncoder.encode( tableName + ".xlsx", "utf-8" ));
            String fileName = tableName;
            ExcelWriterBuilder excelWriterBuilder = new ExcelWriterBuilder();
            excelWriterBuilder.file(response.getOutputStream());
            if (cls != null) {
                excelWriterBuilder.head(cls);
            }
            // 由于 Java 8 localDate 和 localDateTime 不支持转化,需要添加自定义转化器
            excelWriterBuilder.registerConverter(new LocalDateStringConvert());
            excelWriterBuilder.registerConverter(new LocalDateTimeStringConvert());
            // 不设置表头和内容样式
            //表头样式策略
            WriteCellStyle headWriteCellStyle = new WriteCellStyle();
            //设置表头居中对齐
            headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
            WriteFont headWriteFont = new WriteFont();
            headWriteFont.setFontHeightInPoints((short) 11);
            headWriteFont.setBold(true);
            headWriteCellStyle.setWriteFont(headWriteFont);
            excelWriterBuilder.registerWriteHandler(new ExcelMergeUtil(mergeRowIndex, mergeColumeIndex)).sheet(fileName).doWrite(data);
        } catch (Exception e) {
            log.error("导出失败!");
            e.printStackTrace();
        }
    }
  1. 调用动态合并策略导出excel表
		//需要合并的列
        int[] mergeColumeIndex = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 21};
        // 从那一行开始合并
        int mergeRowIndex = 1;
        EasyExcelUtilV2.exportMergeExcel(response, orderExportRespVoList, tableName, orderExportRespVo.class, mergeRowIndex, mergeColumeIndex);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值