EasyExcel导出横向动态表头

需求:导出如下所示excel文档,红框内为动态表头

EasyExcel导出横向动态表头_第1张图片

mysql表内数据格式如下图所示,由于某些特殊原因不能横向展示,仅能纵向展示,所以一个vin对应的数据可能有很多此时导出的时候上图所示的样式更便于人员观看。

依赖项


    com.alibaba
    easyexcel-core
    3.2.1
    compile

实现层

    @Override
    public void exportAviCarParseList(HttpServletResponse response, AviCarParse aviCarParse) {
        // 定义表头
        List> headList = new ArrayList<>();
        // 前三个固定表头
        headList.add(new ArrayList() {{
            add("信息标识码");
        }});
        headList.add(new ArrayList() {{
            add("信息标识值");
        }});
        headList.add(new ArrayList() {{
            add("过点时间");
        }});
        // 表头集合
        List strings = aviCarParseMapper.selectParamCode();
        // 循环插入横向表头
        for (String string : strings) {
            headList.add(new ArrayList() {{
                add(string);
            }});
        }

        List> dataList = Lists.newArrayList();
        // 后台数据 此时数据过来时已经解析成为横向表格样式(后附图)
        List> tmpList = aviCarParseMapper.selectAviCarParseList(aviCarParse, strings);
        // 将数据插入list
        tmpList.forEach(tmp -> {
            List data = Lists.newArrayList();
            for (Object key : tmp.keySet()) {
                data.add(tmp.get(key.toString()));
            }
            dataList.add(data);
        });
        try {
            //设置类型,扩展名为.xls
            response.setContentType("application/vnd.ms-excel");
            EasyExcel.write(response.getOutputStream()).head(headList).sheet("尾标解析记录").doWrite(dataList);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    } 
  

sql转成横向表格数据,List接收 

EasyExcel导出横向动态表头_第2张图片

注:此方式好像是有个bug,表头与数据需要对应 所以我用linkdhashmap接收数据 

你可能感兴趣的:(Java导出,java,maven)