EasyExcel动态导出多级表头

EasyExcel动态导出多级表头

在这里插入图片描述

工具类

/**
     * 特殊表头导出方法
     * @param response
     * @param fileName
     * @param sheetName
     * @param list
     * @param pojoClass
     * @throws IOException
     */
    public static void exportExcelSpecial(HttpServletResponse response, String fileName, String sheetName, List<?> list,
                                   Class<?> pojoClass,String haredName) throws IOException {
        if(StringUtils.isBlank(fileName)){
            //当前日期
            fileName = DateUtils.format(new Date());
        }

        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        fileName = URLEncoder.encode(fileName, "UTF-8");

        response.setHeader("Content-disposition", "attachment;filename=" +  fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), pojoClass)
                .head(gemComplexHead(haredName))
                .sheet(sheetName)
                .doWrite(list);
    }
/**
     * 特殊Excel导出,先sourceList转换成List<targetClass>,再导出
     * @param response
     * @param fileName
     * @param sheetName
     * @param sourceList
     * @param targetClass
     * @throws Exception
     */
    public static void exportExcelToTargetSpecial(HttpServletResponse response, String fileName, String sheetName, List<?> sourceList,
                                           Class<?> targetClass,String haredName) throws Exception {
        List targetList = new ArrayList<>(sourceList.size());
        for(Object source : sourceList){
            Object target = targetClass.newInstance();
            BeanUtils.copyProperties(source, target);
            targetList.add(target);
        }

        exportExcelSpecial(response, fileName, sheetName, targetList, targetClass,haredName);
    }

表头

/**
     * 特殊表头 参数可根据实际情况修改
     * @return 表头集合
     */
    private static List<List<String>> gemComplexHead(String haredName){
       /*
        * 主要的集合 装表头数据
        */
        List<List<String>> list = new ArrayList<>();
        /*
         * 第一列字段arr1 对应字符集合 head0  第二列字段arr2 对应字符集合 head1 第三列字段arr3 对应字符集合 head2
         * 第四列字段arr4 对应字符集合 head3  第五列字段arr5 对应字符集合 head4  第六列字段arr6 对应字符集合 head5
         * 第七列字段arr7 对应字符集合 head6  第八列字段arr8 对应字符集合 head7  第九列字段arr9 对应字符集合 head8
         */
        String[] arr1={"生产排程表","制造单简称","","项目/工序"};
        String[] arr2={"生产排程表",haredName,"设计出图","完工日期"};
        String[] arr3={"生产排程表","下单日期","外协加工","工期"};
        String[] arr4={"生产排程表","","外协加工","送货日期"};
        String[] arr5={"生产排程表","交货日期","备料","备料日期"};
        String[] arr6={"生产排程表","","备料","备料返修"};
        String[] arr7={"生产排程表","","生产装配/电柜等委外","工期"};
        String[] arr8={"生产排程表","计划员","生产装配/电柜等委外","开工日期"};
        String[] arr9={"生产排程表","","生产装配/电柜等委外","完工日期"};
        //第一列
        List<String> head0 = new ArrayList<>();
        Collections.addAll(head0, arr1);
        //第二列
        List<String> head1 = new ArrayList<>();
        Collections.addAll(head1, arr2);
        //第三列
        List<String> head2 = new ArrayList<>();
        Collections.addAll(head2, arr3);
        //第四列
        List<String> head3 = new ArrayList<>();
        Collections.addAll(head3, arr4);
        //第五列
        List<String> head4 = new ArrayList<>();
        Collections.addAll(head4, arr5);
        //第六列
        List<String> head5 = new ArrayList<>();
        Collections.addAll(head5, arr6);
        //第七列
        List<String> head6 = new ArrayList<>();
        Collections.addAll(head6, arr7);
        //第八列
        List<String> head7 = new ArrayList<>();
        Collections.addAll(head7, arr8);
        //第九列
        List<String> head8 = new ArrayList<>();
        Collections.addAll(head8, arr9);

        list.add(head0);
        list.add(head1);
        list.add(head2);
        list.add(head3);
        list.add(head4);
        list.add(head5);
        list.add(head6);
        list.add(head7);
        list.add(head8);
        return list;
    }

调用

 @GetMapping("export")
    @ApiOperation("导出")
    @LogOperation("导出")
    public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
        long equipId = Long.parseLong(params.get("equipId").toString());
        String userName =(String) params.get("userName");
        List<ProdScheduleDTO> list = scheduleService.getProdSche(equipId);
        Map<String,Object> map =new HashMap<>();
        map.put("planUser",userName);
        map.put("mfName",list.get(0).getMfName());
        map.put("orderDate","");
        map.put("deliveryDate","");
        ExcelUtils.exportExcelToTargetSpecial(response, null, "生产排程表", list, ProdScheduleExcel.class,list.get(0).getMfName());
    }
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用EasyExcel来实现多级表头导出EasyExcel是一个基于Java的简单易用的Excel操作工具,支持大数据量的导入导出操作。 下面是一个示例代码,演示了如何实现多级表头导出: ```java // 创建一个excel写对象 ExcelWriter writer = EasyExcel.write("output.xlsx").build(); // 定义表头数据 List<List<String>> head = new ArrayList<>(); // 第一行表头 List<String> headRow1 = new ArrayList<>(); headRow1.add("一级表头"); headRow1.add("一级表头"); headRow1.add("一级表头"); head.add(headRow1); // 第二行表头 List<String> headRow2 = new ArrayList<>(); headRow2.add("二级表头"); headRow2.add("二级表头"); headRow2.add("二级表头"); head.add(headRow2); // 第三行表头 List<String> headRow3 = new ArrayList<>(); headRow3.add("三级表头"); headRow3.add("三级表头"); headRow3.add("三级表头"); head.add(headRow3); // 写入表头数据 Sheet sheet = new Sheet(1, 0); sheet.setHead(head); writer.write1(null, sheet); // 写入内容数据(省略) // 关闭excel写对象 writer.finish(); ``` 在上面的示例代码中,我们创建了一个ExcelWriter对象,并指定了输出文件名为"output.xlsx"。然后,我们定义了一个包含多级表头表头数据,每一级的表头都是一个List<String>。我们将这些表头数据添加到head列表中,然后使用Sheet对象将head列表设置为excel的表头。最后,调用writer的write1方法写入表头数据。 你可以根据需要修改示例代码中的表头数据,然后使用EasyExcel提供的其他方法写入内容数据。完成后,调用writer的finish方法关闭excel写对象即可。 希望对你有帮助!如果还有其他问题,请继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值