主页 > 手机  > 

EasyExcel自定义头信息导出

EasyExcel自定义头信息导出

需求:需要在导出 excel时,合并单元格自定义头信息(动态生成),然后才是字段列表头即导出数据。

EasyExcel - 使用table去写入: easyexcel.opensource.alibaba /docs/current/quickstart/write#%E4%BD%BF%E7%94%A8table%E5%8E%BB%E5%86%99%E5%85%A5

一、代码实现 1、查询导出数据 1.1 导出实体类 import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.format.DateTimeFormat; import com.alibaba.excel.converters.localdatetime.LocalDateTimeStringConverter; import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; /** * 用户信息 导出DTO */ @Data @ExcelIgnoreUnannotated public class UserExportExcelDTO implements Serializable { private static final long serialVersionUID = -5255117385546252447L; /** * 用户ID */ @ExcelIgnore private Long userId; /** * 用户名 */ @ExcelProperty(value = "用户名") private String username; /** * 年龄 */ @ExcelProperty(value = "年龄") private Integer age; /** * 电话号码 */ @ExcelProperty(value = "电话号码") private String phone; /** * 昵称 */ @ExcelProperty(value = "昵称") private String nickname; /** * 姓名 */ @ExcelProperty(value = "姓名") private String name; /** * 创建时间 * 使用 converter或者 @DateTimeFormat格式化时间,如果两者同时使用,@DateTimeFormat优先级高 */ @ExcelProperty(value = "创建时间", converter = LocalDateTimeStringConverter.class) // yyyy-MM-dd HH:mm:ss @DateTimeFormat("yyyy年MM月dd日") private LocalDateTime createTime; } 1.2 查询导出数据方法 @Override public List<UserExportExcelDTO> listExportExcelData(UserPageQueryRequest pageRequest) { pageRequest.setCurrentPage(1L); pageRequest.setPageSize((long) Integer.MAX_VALUE); BasePageResult<UserPageDTO> basePageResult = pageQuery(pageRequest); if(!basePageResult.isSuccess()){ return Collections.EMPTY_LIST; } return basePageResult.getPageList().stream().map(userPageDTO -> { UserExportExcelDTO exportExcelDTO = new UserExportExcelDTO(); BeanUtils.copyProperties(userPageDTO, exportExcelDTO); return exportExcelDTO; }).collect(Collectors.toList()); } 2、EasyExcel使用 table写入 /** * 用户导出接口 * * @param pageRequest 分页查询请求体 */ @SneakyThrows @ApiOperation(value = "用户导出接口") @GetMapping("/exportExcel") public void exportExcel(HttpServletResponse response, @RequestBody UserPageQueryRequest pageRequest) { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("用户信息", StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); // 查询导出数据 List<UserExportExcelDTO> exportExcelDataList = userService.listExportExcelData(pageRequest); // 自定义头信息 StringBuilder headName = new StringBuilder(); LocalDateTime startTime = pageRequest.getCreateTimeStart(); LocalDateTime endTime = pageRequest.getCreateTimeEnd(); if (startTime != null && endTime != null) { String startTimeStr = LocalDateTimeUtil.format(startTime, DatePattern.CHINESE_DATE_PATTERN); String endTimeStr = LocalDateTimeUtil.format(endTime, DatePattern.CHINESE_DATE_PATTERN); headName.append(startTimeStr).append("至").append(endTimeStr); } headName.append("时间段的用户信息"); List<List<String>> headList = new ArrayList<>(); List<String> head = new ArrayList<>(); head.add(headName.toString()); headList.add(head); /** * 创建 ExcelWriter * 1.创建写入的工作表,不需要表头。命名为"sheet1"。 */ ExcelWriter excelWriter = null; try { excelWriter = EasyExcelFactory.write(response.getOutputStream()).build(); } catch (IOException e) { log.error("导出车辆在线率统计异常:e=", e); } WriteSheet writeSheet = EasyExcel.writerSheet("sheet1").needHead(Boolean.FALSE).build(); /** * 2.创建并写入表格数据,设置表头为 headList,需要表头。 * tableNo:表格序号,从0开始。 * OnceAbsoluteMergeStrategy:创建一个合并单元格策略。 */ WriteTable writeTable1 = EasyExcel.writerTable(0) .head(headList) .registerWriteHandler(new OnceAbsoluteMergeStrategy(0, 2, 0, 5)) .needHead(Boolean.TRUE) .build(); // 写入空数据到 writeSheet excelWriter.write(new ArrayList<>(), writeSheet, writeTable1); /** * 3.创建写入表格,基于AnysCarOfflineStatisticsVo类定义表头,需要表头。 * writerTable(3):因为 writeTable1从0开始,并合并了 3行,所以 writeTable2是从第4个行(tableNo = 3)开始写入。 * SimpleColumnWidthStyleStrategy:设置列宽策略 */ WriteTable writeTable2 = EasyExcel.writerTable(3) .head(UserExportExcelDTO.class) .registerWriteHandler(new SimpleColumnWidthStyleStrategy(25)) .relativeHeadRowIndex(2) .needHead(Boolean.TRUE) .build(); // 写入导出数据到 writeSheet excelWriter.write(exportExcelDataList, writeSheet, writeTable2); excelWriter.finish(); } 3、导出结果

– 求知若饥,虚心若愚。

标签:

EasyExcel自定义头信息导出由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“EasyExcel自定义头信息导出