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;
相关推荐
期待のcode27 分钟前
原子操作类LongAdder
java·开发语言
舟舟亢亢1 小时前
Java集合笔记总结
java·笔记
pas1361 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
小二李1 小时前
第11章 nestjs服务端开发:登录鉴权
运维·服务器
小酒窝.1 小时前
【多线程】多线程打印ABC
java
摇滚侠1 小时前
2 小时快速入门 ES6 基础视频教程
前端·ecmascript·es6
乡野码圣2 小时前
【RK3588 Android12】RCU机制
java·jvm·数据库
JAVA+C语言2 小时前
如何优化 Java 多主机通信的性能?
java·开发语言·php
i建模2 小时前
如何在Arch Linux中重设忘记的root密码
linux·运维·服务器
珑墨2 小时前
【Turbo】使用介绍
前端