easyexcel导出动态写入标题和数据
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;