我们都知道Java解析、生成Excel比较有名的框架有Apache poi、jxl,但他们都存在一个严重的问题就是非常的耗内存,而且最重要的是这些工具类搭建比较麻烦。因为我们都是打工的仔嘛,当然需要讲究效率啦,如果可以5分钟完成这个excel功能,那领导还不得敬你三分哈哈!
所以有了本篇文章,帮助大家快速实现基于SpringBoot的excel导出功能,我们选用的是alibaba的easyexcel框架,这个框架在解析excel简直yyds,本文主要给大家介绍如何快速接入实现。
一、引入依赖二、核心工具类com.alibaba easyexcel2.2.11
public static void download(HttpServletResponse response, List datas, Class clazz, String fileName) { // parseHead(获取实体类定义的属性名称,也就是excel表头) download(response, datas, clazz, parseHead(clazz), fileName); }
private static List> parseHead(Class clazz) { Field[] fields = clazz.getDeclaredFields(); List
> heads = new ArrayList<>(); for (Field field : fields) { List
head = new ArrayList<>(); // 在开发我们应该少不了swagger, 这个注解是swagger提供的,当然我们也可以自定义一个注解。(作用是为了属性名映射中文名称输出到excel表头) ApiModelProperty apiAnnotation = field.getAnnotation(ApiModelProperty.class); head.add(apiAnnotation.value()); heads.add(head); } return heads; }
public static void download(HttpServletResponse response, List datas, Class clazz, List> head, String fileName) { // 设置web响应输出的文件名称 setResponseHeader(response, fileName); try { // 核心中的核心 export(response.getOutputStream(), head, datas, clazz); } catch (IOException e) { log.info("无法获取响应流", e); } }
private static void setResponseHeader(HttpServletResponse response, String fileName) { response.reset(); response.setContentType("application/vnd.ms-excel;charset=utf-8"); try { response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8")); } catch (UnsupportedEncodingException e) { log.info("不支持的编码", e); } response.setCharacterEncoding("UTF-8"); }
核心中的核心来了!!!
private static void export(OutputStream os, List> head, List datas, Class clazz) throws IOException { if (datas == null) { datas = new ArrayList(); } ExcelWriter excelWriter = null; BufferedOutputStream bos = new BufferedOutputStream(os); try { excelWriter = EasyExcel.write(bos, clazz).build(); WriteSheet testSheet = EasyExcel.writerSheet("sheet1") .head(head) .build(); excelWriter.write(datas, testSheet); } catch (Exception e) { log.info("easyexcel初始化错误", e); } finally { bos.flush(); if (excelWriter != null) { excelWriter.finish(); } } }
到这里我们就把整个核心逻辑搭建好啦,是不是很简单,接下来给大家跑个例子。
三、实战- 定义一个http接口
@RequestMapping("/excel") @RestController @Api(tags = "excel解析") @Slf4j public class ExcelTestController { @PostMapping("/export") public void export(HttpServletResponse response) { Listlist = Lists.newArrayList(); ExcelExportResponseDTO info1 = new ExcelExportResponseDTO(); info1.setName("rose"); info1.setAge("23"); list.add(info1); ExcelUtil.download(response, list, ExcelExportResponseDTO.class, "个人信息"); } }
-
访问http接口
-
输出excel结果
到这里就完成了整个Java之Excel导出功能的实现,大家只需要Ctrl+C、Ctrl+V就可以快速应用啦,希望可以帮助到大家,下期输出excel导入功能的实现!
加油打工人!奥利给
我是rose,感谢各位的观看,各位的点赞就是rose输出的最大动力,我们下篇文章见!
注:如果本篇博客有任何错误和建议,欢迎人才们留言!
五、系列推荐《Java之Excel导入功能快速实现》
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)