Java之Excel导出功能快速实现

Java之Excel导出功能快速实现我们都知道Java解析、生成Excel比较有名的框架有Apache poi、jxl,但他们都存在一个严重的问题就是非常的耗内存,而且最重要的是这些工具类搭建比较麻烦。

前言

我们都知道Java解析、生成Excel比较有名的框架有Apache poi、jxl,但他们都存在一个严重的问题就是非常的耗内存,而且最重要的是这些工具类搭建比较麻烦。因为我们都是打工的仔嘛,当然需要讲究效率啦,如果可以5分钟完成这个excel功能,那领导还不得敬你三分哈哈!

所以有了本篇文章,帮助大家快速实现基于SpringBoot的excel导出功能,我们选用的是alibaba的easyexcel框架,这个框架在解析excel简直yyds,本文主要给大家介绍如何快速接入实现。

一、引入依赖

<!-- excel导出 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.11</version>
</dependency>

二、核心工具类

/** * 下载 * * @param response web响应 * @param datas 导出数据 * @param clazz 实体类 * @param fileName 导出文件名称 * @return */
public static void download(HttpServletResponse response, List datas, Class clazz, String fileName) {
	// parseHead(获取实体类定义的属性名称,也就是excel表头)
    download(response, datas, clazz, parseHead(clazz), fileName);
}
/**
 * 解析实体类
 *
 * @param clazz    实体类
 * @return
 */
private static List<List<String>> parseHead(Class clazz) {
    Field[] fields = clazz.getDeclaredFields();
    List<List<String>> heads = new ArrayList<>();

    for (Field field : fields) {
        List<String> head = new ArrayList<>();
        // 在开发我们应该少不了swagger, 这个注解是swagger提供的,当然我们也可以自定义一个注解。(作用是为了属性名映射中文名称输出到excel表头)
        ApiModelProperty apiAnnotation = field.getAnnotation(ApiModelProperty.class);
        head.add(apiAnnotation.value());
        heads.add(head);
    }
    return heads;
}
/** * 下载 * * @param response web响应 * @param datas 导出数据 * @param head 表头 * @param fileName 导出文件名称 * @return */
public static void download(HttpServletResponse response, List datas, Class clazz, List<List<String>> head, String fileName) {
    // 设置web响应输出的文件名称
    setResponseHeader(response, fileName);
    try {
    	// 核心中的核心
        export(response.getOutputStream(), head, datas, clazz);
    } catch (IOException e) {
        log.info("无法获取响应流", e);
    }
}
/** * 设置web响应输出的文件名称 * @param response web响应 * @param fileName 导出文件名称 */
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");
}

核心中的核心来了!!!

/** * * @param os 字节输出流 * @param head 表头 * @param datas 导出数据 * @param clazz 实体类 * @throws IOException */
private static void export(OutputStream os, List<List<String>> 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();
        }
    }
}

到这里我们就把整个核心逻辑搭建好啦,是不是很简单,接下来给大家跑个例子。

三、实战

  1. 定义一个http接口
@RequestMapping("/excel")
@RestController
@Api(tags = "excel解析")
@Slf4j
public class ExcelTestController {

    @PostMapping("/export")
    public void export(HttpServletResponse response) {
        List<ExcelExportResponseDTO> list = Lists.newArrayList();
        ExcelExportResponseDTO info1 = new ExcelExportResponseDTO();
        info1.setName("rose");
        info1.setAge("23");
        list.add(info1);
        ExcelUtil.download(response, list, ExcelExportResponseDTO.class, "个人信息");
    }

}
  1. 访问http接口

Java之Excel导出功能快速实现

  1. 输出excel结果

Java之Excel导出功能快速实现

四、总结

到这里就完成了整个Java之Excel导出功能的实现,大家只需要Ctrl+C、Ctrl+V就可以快速应用啦,希望可以帮助到大家,下期输出excel导入功能的实现!

加油打工人!奥利给😎

我是rose,感谢各位的观看,各位的点赞就是rose输出的最大动力,我们下篇文章见!

注:如果本篇博客有任何错误和建议,欢迎人才们留言!

五、系列推荐

《Java之Excel导入功能快速实现》

今天的文章Java之Excel导出功能快速实现分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/20123.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注