easyexcel导出动态写入标题和数据

pom依赖

复制代码
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>4.0.3</version>
</dependency>

导出数据和核心代码

java 复制代码
ElectricDetailTotalDO total = gridElectricDetailTotal(enterpriseId, intervalType, date);
        List<ElectricDetailTotalDO.Detail> list = Arrays.asList(total.getCity(), total.getGreen(), total.getTotal());
        List<ElectricDetailTotalExportBO> totalList = BeanUtils.mapList(list, ElectricDetailTotalExportBO.class);
        totalList.get(0).setEnergyType("市电");
        totalList.get(1).setEnergyType("绿电");
        totalList.get(2).setEnergyType("合计用电量");

        List<GridElectricDetailDayDO> gridElectricDetailDayDOList = gridElectricDetailListDay(enterpriseId, intervalType, date);
        //构建表头
        List<List<String>> head = new ArrayList<>();
        head.add(Arrays.asList("时间", "时间"));
        head.add(Arrays.asList("时段", "时段"));
        List<GridElectricDetailDayDO.Grid> gridList = gridElectricDetailDayDOList.get(0).getGridList();
        for (GridElectricDetailDayDO.Grid grid : gridList) {
            head.add(Arrays.asList(grid.getGridName(), "市电量(kWh)"));
            head.add(Arrays.asList(grid.getGridName(), "绿电电量(kWh)"));
        }
        //构建数据
        List<List<String>> dataList = new ArrayList<>();
        for (GridElectricDetailDayDO gridElectricDetailDayDO : gridElectricDetailDayDOList) {
            List<String> data = new ArrayList<>();
            data.add(gridElectricDetailDayDO.getTime());
            data.add(gridElectricDetailDayDO.getElecTime());
            for (GridElectricDetailDayDO.Grid grid : gridElectricDetailDayDO.getGridList()) {
                data.add(DecimalUtils.removeTrailingZero(grid.getCityElectric()));
                data.add(DecimalUtils.removeTrailingZero(grid.getGreenElectric()));
            }
            dataList.add(data);
        }

        LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(4, 1);
        //@ColumnWidth(15)
        SimpleColumnWidthStyleStrategy simpleColumnWidthStyleStrategy = new SimpleColumnWidthStyleStrategy(15);

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
//        String fileName = "d:\\Desktop\\" + System.currentTimeMillis() + ".xlsx";
//        try (ExcelWriter excelWriter = EasyExcel.write(fileName)
        try (ExcelWriter excelWriter = EasyExcel.write(bos)
                .registerWriteHandler(getHorizontalCellStyleStrategy()).build()) {
            // 把sheet设置为不需要头 不然会输出sheet的头 这样看起来第一个table 就有2个头了
            WriteSheet writeSheet = EasyExcel.writerSheet("数据").needHead(Boolean.FALSE).build();
            // 这里必须指定需要头,table 会继承sheet的配置,sheet配置了不需要,table 默认也是不需要
            WriteTable writeTable0 = EasyExcel.writerTable(0).head(ElectricDetailTotalExportBO.class).needHead(Boolean.TRUE).build();
            WriteTable writeTable1 = EasyExcel.writerTable(1).head(head)
                    .registerWriteHandler(loopMergeStrategy)
                    .registerWriteHandler(simpleColumnWidthStyleStrategy)
                    .needHead(Boolean.TRUE).build();
            //写入头
            excelWriter.write(totalList, writeSheet, writeTable0);
            writeTable1.setRelativeHeadRowIndex(1);

            //写入列表
            excelWriter.write(dataList, writeSheet, writeTable1);
        }

        DownloadFile downloadFile = new DownloadFile();
        downloadFile.setFilename("XX.xlsx");
        downloadFile.setContent(bos.toByteArray());
        return downloadFile;
相关推荐
006_13 分钟前
IDEA Eclipse版设置
java·ide·intellij-idea
im_AMBER14 分钟前
编辑器项目开发复盘:主题切换
前端·学习·前端框架·编辑器·html5
蜜獾云19 分钟前
设计模式之构造器模式:封装复杂对象的构造逻辑
java·开发语言·设计模式
小小小米粒3 小时前
NAT 模式, 仅主机模式 Host-Only ,桥接模式 Bridge
linux·服务器·网络
@PHARAOH3 小时前
HOW - Kratos 入门实践(二)- 概念学习
前端·微服务·go
无心水4 小时前
【OpenClaw:实战部署】5、全平台部署OpenClaw(Win/Mac/Linux/云服务器)——10分钟跑通第一个本地AI智能体
java·人工智能·ai·智能体·ai智能体·ai架构·openclaw
一只大袋鼠5 小时前
Redis 安装+基于短信验证码登录功能的完整实现
java·开发语言·数据库·redis·缓存·学习笔记
※DX3906※6 小时前
Java排序算法--全面详解面试中涉及的排序
java·开发语言·数据结构·面试·排序算法
cur1es7 小时前
【JVM类加载&双亲委派模型&垃圾回收机制】
java·jvm·gc·垃圾回收·类加载·双亲委派模型
Mr.朱鹏7 小时前
JVM-GC垃圾回收案例
java·jvm·spring boot·算法·spring·spring cloud·java-ee