步骤:
1.查找官方API文档理解实现
2.实现融入到代码里面
一:Easy Excel重复多次写入(写到单个或者多个Sheet)
重复多次写入(写到单个或者多个Sheet)
理解重点:
// 每次都要创建writeSheet 这里注意必须指定sheetNo 第几个sheetNo 而且sheetName:sheet名字必须不一样。head设置表头,这里注意DemoData.class 可以每次都变,我这里为了方便 所以用的同一个class
// 实际上可以一直变
WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).head(DemoData.class).build();
// 分页去数据库查询数据 这里可以去数据库查询每一页的数据
List<DemoData> data = data();
//表格写入对应sheet的数据
excelWriter.write(data, writeSheet);
二:实现
目的:我要创建一个表格两个sheet
步骤:
1.数据:第一个sheet页的数据.,第二个sheet页的数据
3.创建一个表格ExcelWriter,写入对应sheet的数据代码:
代码模板:
/**
* 导出
*
* @param response
* @param dto 筛选条件
*/
@Override
public void export(HttpServletResponse response, DspSmsInfoDTO dto) throws IOException {
//1.第一个Sheet页数据
List<SmsDeptStatisticsVo> smsDeptStatisticsList = this.statisticsDeptSms(dto);
//构建分页信息
Query query = new Query();
query.setCurrent(1);
query.setSize(Integer.MAX_VALUE);
//1.第二个Sheet页数据
LambdaQueryWrapper<DspSmsInfo> queryWrapper = new LambdaQueryWrapper<>();
//返回实体page
IPage<DspSmsInfo> page = page(Condition.getPage(query), queryWrapper);
IPage<DspSmsInfoVO> pageVO = DspSmsInfoWrapper.build().pageVO(page);
List<DspSmsInfoVO> records = pageVO.getRecords();
//2.处理为导出数据类
List<SmsExcelVO> itemList = records.stream().map(o -> BeanUtil.copy(o, SmsExcelVO.class)).collect(Collectors.toList());
List<SmsDeptStatisticsExcelVo> list = smsDeptStatisticsList.stream().map(o -> BeanUtil.copy(o, SmsDeptStatisticsExcelVo.class)).collect(Collectors.toList());
//3.返回信息
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding(Charsets.UTF_8.name());
String fileName = "消息统计";
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, Charsets.UTF_8.name()) + ".xlsx");
//将数据写入sheet页中
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
WriteSheet writeSheet1 = EasyExcel.writerSheet(0, "发送统计").head(SmsDeptStatisticsExcelVo.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
WriteSheet writeSheet2 = EasyExcel.writerSheet(1, "发送明细").head(SmsExcelVO.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
excelWriter.write(list, writeSheet1);
excelWriter.write(itemList, writeSheet2);
excelWriter.finish();
response.flushBuffer();
}
导出效果: