功能说明: 相当于导出一个计划安排,一条计划有一条数据,按照计划的计划完成时间显示, 根据数据状态导出背景色
思路:表头不固定,自己组合数据,格式为List>, 数据也是这个格式
导出效果图
数据库信息
CREATE TABLE `sys_plan` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(40) CHARACTER SET utf8mb3 COLLATE utf8_general_ci NOT NULL COMMENT '计划名称',
`description` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_general_ci NOT NULL COMMENT '计划描述',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '应用状态',
`expect_start_at` datetime DEFAULT NULL COMMENT '计划开始时间',
`expect_end_at` datetime NOT NULL COMMENT '计划完成时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_name` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2151158250246848513 DEFAULT CHARSET=utf8mb3 COMMENT='系统应用配置表';
总体代码
1 public void export(HttpServletResponse response, PlanExportQuery query) {
2 //查询所有数据
3 List list = this.dao.queryList(query);
4 if(null != list && !list.isEmpty()){
5 PlanViewDTO dto = handleData(list, generateDefaultTitles());//生成数据
6 //获取表头
7 List titleVOList= dto.getTitles();
8 List titlesCode = new ArrayList<>();
9 List> titles = generateTitle(titleVOList, titlesCode);
10 //样式信息
11 List models = new ArrayList<>();
12 //获取数据
13 try {
14 String name = "计划视图信息";
15 List> datas = generateData(dto.getDatas(), models, query.getColorInfo(), name, titlesCode, dto.getTemporary());
16 response.setContentType("application/vnd.ms-excel");
17 response.setCharacterEncoding(StandardCharsets.UTF_8.name());
18 response.addHeader("Content-disposition","attachment;filename="+ name +".xlsx");
19 EasyExcel.write(response.getOutputStream()).head(titles).automaticMergeHead(false)//自动合并关闭
20 .registerWriteHandler(new CustomCellStyleHandler(models))//表格样式
21 .registerWriteHandler(new HeadMergeStrategy(2))//表头合并
22 .registerWriteHandler(new HeadCustomerWidthStrategy())//表头自定义宽度
23 .sheet(name).doWrite(datas);
24
25 } catch (Exception e) {
26 CheckHelper.check(1 != 1, new CustomException(ErrorType.BAD_REQUEST.getCode(), e.getMessage()));
27 // e.printStackTrace();
28 }
29
30 }
31
32 }
33
34 /**
35 * 获取Excel数据
36 * @param datas 数据信息
37 * @param models 表格样式信息
38 * @param color 颜色信息
39 * @param sheetName 表单
40 * @param titlesCode 不固定表格的code
41 * @param addParam 添加的参数
42 * @return
43 * @throws Exception
44 */
45 private List> generateData(List datas, List models, Map color,
46 String sheetName, List titlesCode, Map addParam)
47 throws Exception {
48 List> list = new ArrayList<>();
49 for(int i=0; i){
50 List