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;
相关推荐
要加油哦~几秒前
AI | 实践教程 - ScreenCoder | 多agents前端代码生成
前端·javascript·人工智能
程序员Sunday4 分钟前
说点不一样的。GPT-5.3 与 Claude Opus 4.6 同时炸场,前端变天了?
前端·gpt·状态模式
yq1982043011569 分钟前
静思书屋:基于Java Web技术栈构建高性能图书信息平台实践
java·开发语言·前端
一个public的class10 分钟前
你在浏览器输入一个网址,到底发生了什么?
java·开发语言·javascript
有位神秘人12 分钟前
kotlin与Java中的单例模式总结
java·单例模式·kotlin
aPurpleBerry13 分钟前
monorepo (Monolithic Repository) pnpm rush
前端
golang学习记17 分钟前
IntelliJ IDEA 2025.3 重磅发布:K2 模式全面接管 Kotlin —— 告别 K1,性能飙升 40%!
java·kotlin·intellij-idea
青茶36019 分钟前
php怎么实现订单接口状态轮询请求
前端·javascript·php
爬山算法20 分钟前
Hibernate(89)如何在压力测试中使用Hibernate?
java·压力测试·hibernate
开开心心就好24 分钟前
发票合并打印工具,多页布局设置实时预览
linux·运维·服务器·windows·pdf·harmonyos·1024程序员节