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;