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

发布于:2025-05-09 ⋅ 阅读:(18) ⋅ 点赞:(0)

pom依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>4.0.3</version>
</dependency>

导出数据和核心代码

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;


网站公告

今日签到

点亮在社区的每一天
去签到