springboot系列(二十四):如何实现Excel文件导出?这你得会 | 超级详细,建议收藏

Posted bug菌¹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot系列(二十四):如何实现Excel文件导出?这你得会 | 超级详细,建议收藏相关的知识,希望对你有一定的参考价值。

👨‍🎓作者:bug菌

🎉简介:在CSDN、掘金等社区优质创作者,全网合计6w粉+,对一切技术都感兴趣,重心偏java方向,目前运营公众号[猿圈奇妙屋],欢迎小伙伴们的加入,一起秃头。

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

【开发云】年年都是折扣价,不用四处薅羊毛

         嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!

       小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章 点亮👍吧,您的点赞三连( 收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

一、前言🔥

       上一期,我们是重点通过集成了easypoi实现了excel表格数据批量导入并成功保存入库,对吧,如果你是中途插进来看到我的这篇文章的话,那我还得请你先把前两期都大致浏览一下,我的内容教学,都是循序渐进式的推进,不会量大也不会整体看下来毫无收获,所以,从我的第一期开始看起吧《集成easypoi实现 Excel的导入导出之准备篇》

        这一期,我将带着大家继续讲解如何通过easypoi实现excel的导出,可能很多小伙伴都写过,但是思路肯定会有所偏差,或许看看我的,对你而言,说不定在思路上能有大的触发,那么我们就开始今天的内容啦?你们都准备好了么。

二、添加依赖🔥

        害怕有同学直接看到我的这篇文章,所以环境配置还是提一嘴吧,省的出现不必要的误导。

        在你的项目pom.xml配置文件中引入easypoi的依赖,具体如下:

<!--easypoi依赖,excel导入导出-->
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-spring-boot-starter</artifactId>
    <version>4.2.0</version>
</dependency>

三、实现excel导出🔥

1️⃣定义导出vo

        我们先来定义一个导出vo,目的是可以对每个导出字段进行长宽等样式进行自定义化,比如我就按照数据长度判断,依次给每个字段加上width 属性,定义每个字段在excel文件中的列长度。

具体代码如下:

Import.java

package com.example.demo.vo.ExcelUser;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.example.demo.entity.UserEntity;
import lombok.Data;import java.io.Serializable;

/**
 * excel导入user参数
 *
 * @author luoYong
 * @version 1.0
 * @date 2022/2/15 14:34
 */
@Data
public class ExportUser implements Serializable 

    private static final long serialVersionUID = 1L;

   /**
    * @Excel 作用在一个filed上面,对列的描述
    * @param name 列名
    * @param orderNum 下标,从0开始。
    */
    @Excel(name = "姓名", width = 10.0)
    private String name;

    @Excel(name = "年龄", width = 10.0)
    private Integer age;

    @Excel(name = "性别", width = 5.0)
    private String sex;

    @Excel(name = "地址", width = 30.0)
    private String address;

    @Excel(name = "用户描述", width = 20.0)
    private String describes;

    public ExportUser() 
    

    //构造函数
    public ExportUser(UserEntity user) 
        this.name = user.getName();
        this.age = user.getAge();
        this.address = user.getAddress();
        this.sex = user.getSex();
        this.describes = user.getDescribes();
    

2️⃣定义导出方法

UserController.java

具体代码如下:

/**
 * excel批量用户导出
 */
@GetMapping("export")
@ApiOperation(value = "excel批量用户导出", notes = "excel批量用户导出")
public void exportUsers(HttpServletResponse response) 
    userService.exportUsers(response);

3️⃣定义导出接口

UserServeice.java

具体代码如下:

/**
 * excel批量用户导出
 */
void exportUsers(HttpServletResponse response);

4️⃣实现导出方法(核心)

UserServeiceImpl.java

       具体代码实现如下:仅供大家参考,你们按照你们项目实际需求进行修改,我只是给大家做个演示,好吧,基本就是常见的如下设置,别的什么的没啥的了。

/**
 * excel批量用户导出
 */
@Overridepublic void exportUsers(HttpServletResponse response) 

    try 
        //从数据库查询到数据
        List<UserEntity> users = this.list();

        //设置信息头,告诉浏览器内容为excel类型
        response.setHeader("content-Type", "application/vnd.ms-excel");
        //设置下载名称
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("学生信息表.xls", StandardCharsets.UTF_8.name()));
        //字节流输出
        ServletOutputStream out = response.getOutputStream();
        //设置excel参数
        ExportParams params = new ExportParams();
        //设置sheet名
        params.setSheetName("学生列表");
        //设置标题
        params.setTitle("学生信息表");

        //转成对应的类型;要不然会报错,虽然也可以导出成功。
        List<ExportUser> exportUsers = changeType(users);
        //导入excel
        Workbook workbook = ExcelExportUtil.exportExcel(params, ExportUser.class,exportUsers );
        //写入
        workbook.write(out);
     catch (Exception e) 
        e.printStackTrace();
    

5️⃣pojo类转型

UserServeiceImpl.java

        具体实现代码如下:仅供大家参考,你们也可以用其他的JSON工具类来拷贝赋值,都可。

/**
 * 转成导出vo
 *
 * @param users  users集合
 */
private List<ExportUser> changeType(List<UserEntity> users) 
    List<ExportUser> res = new ArrayList<>();
    for (UserEntity user : users) 
        ExportUser exportUser = new ExportUser(user);
        res.add(exportUser);
    
    return res;

6️⃣浏览器调用接口

       在浏览器地址栏输入导出接口url:http://localhost:8080/user/export然后键盘回车,你将会看到,浏览器左下方,会弹出一个excel下载窗口,这就意味着已经写入excel成功了。

浏览器实际下载截图:

        等待下载完成,我们打开excel文件,可以检查一下你代码中所设置的文件标题,字段名,字段长度,文件名等是否都设置成功了。

       导出excel文件打开后实际截图如下:

        可以看到,上方截图已经证明导出方法完全正确,所设置的内容都设置上了,比如每个字段的长度,就是按我所设置的width属性来进行展示的,就很nice。

       但是记得之前有个伙伴说,使用postman也可以进行调用导出接口的啊,就是按我如下这样设置操作,输入url及请求方式,然后点击[Send and Download]

        但是提示保存到本地是个名称为[response.xls]的文件,也不是按我所设置的fileName命名,我感觉大事不妙,肯定这不是正确的。

        我打开文件也发现并没有我所list()查询出来的数据,就是一个空excel表格,被我预料到了。但是很好奇,为什么数据没有被写入呢?还是说我postman的打开方式不对?如果有遇到该问题的小伙伴又解决类似的问题,还请教教bug菌呀,一起交流学习哦。

        ... ...

       ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~

四、往期推荐🔥

五、文末🔥

        如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。

【开发云】年年都是折扣价,不用四处薅羊毛

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

        最后送大家两句我很喜欢的话,与诸君共勉!


☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。

🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。


​​​​

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

以上是关于springboot系列(二十四):如何实现Excel文件导出?这你得会 | 超级详细,建议收藏的主要内容,如果未能解决你的问题,请参考以下文章

springboot系列(二十四):如何实现Excel文件导出?这你得会 | 超级详细,建议收藏

(二十四)ATP应用测试平台——springboot集成fastdfs上传与下载功能

Spring Boot2 系列教程(二十) | SpringBoot 是如何实现日志的?

Python学习系列二十四scikit-learn库逻辑回归实现唯品会用户购买行为预测

RocketMQ(二十四)整合SpringBoot

springboot系列(十四):如何实现发送图片doc文档等附件邮件?你一定得会|超级详细,建议收藏