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;
相关推荐
起名真的太难了13 分钟前
Linux系统运维与远程管理核心命令速查指南
linux·运维·服务器
星空16 分钟前
maven镜像
java·maven
tg_xianheyun19 分钟前
阿里云国际账号注册代充值怎么选服务商?
服务器·阿里云·云计算·全球访问优化
IT小盘23 分钟前
17-AI应用防止越权访问知识库
服务器·网络·windows
Vuji28 分钟前
Pi 插件解剖|ssh.ts:只用 221 行,让 Agent 直接在远程机器干活
前端·人工智能·agent
酷可达拉斯28 分钟前
自动化运维-Ansible Role详解
linux·运维·服务器·自动化·ansible
为思念酝酿的痛37 分钟前
Socket编程--TCP
服务器·网络·tcp/ip
漏刻有时44 分钟前
Three.js 3D地图开发实录:从GeoJSON到流光飞线,一个纯前端SPA可视化引擎的12个坑
前端
clawdashi1 小时前
2026 办公 Agent 选型指南:按场景分五类,一次讲清
前端·人工智能
无糖可可果1 小时前
从零看懂 JWT 登录鉴权:一个 React Demo 的完整拆解
前端·javascript