likes
comments
collection
share

Springboot系列(十六):集成easypoi实现Excel的导入导出(实战篇二)

作者站长头像
站长
· 阅读数 20

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

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

一、前言🔥

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

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

二、添加依赖

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

       在项目的pom文件中引入easypoio依赖。

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

三、实现excel导出

第一步:定义一个excel导出类

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

具体代码如下:

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();
    }
}

第二步:在控制器中添加一个导出类

UserController.java

具体代码如下:

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

第三步:定义一个导出接口

UserServeice.java

具体代码如下:

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

第四步:实现导出接口(核心)

UserServeiceImpl.java

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

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

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

        //设置信息头,告诉浏览器内容为excel类型
        response.setHeader("content-Type", "application/vnd.ms-excel");
        //文件名称
        String fileName = "学生信息表.xls";
        //sheet名称
        String sheetName = "学生列表";
        fileName = new String(fileName.getBytes(), "ISO-8859-1");

        //设置下载名称
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        //字节流输出
        ServletOutputStream out = response.getOutputStream();
        //设置excel参数
        ExportParams params = new ExportParams();
        //设置sheet名
        params.setSheetName(sheetName);
        //设置标题
        params.setTitle("学生信息表");

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

第五步:实现UserEntity类转成ExportUser类

UserServeiceImpl.java

具体实现代码如下:仅供大家参考

/**
 * 转成导出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;
}

第六步:浏览器调用接口

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

浏览器实际下载截图:

Springboot系列(十六):集成easypoi实现Excel的导入导出(实战篇二)

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

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

Springboot系列(十六):集成easypoi实现Excel的导入导出(实战篇二)

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

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

Springboot系列(十六):集成easypoi实现Excel的导入导出(实战篇二)

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

Springboot系列(十六):集成easypoi实现Excel的导入导出(实战篇二)

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

Springboot系列(十六):集成easypoi实现Excel的导入导出(实战篇二)

       ... ...

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

四、往期热门推荐

文末🔥

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

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

Springboot系列(十六):集成easypoi实现Excel的导入导出(实战篇二)

感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。 时刻警醒自己: 抱怨没有用,一切靠自己; 想要过更好的生活,那就要逼着自己变的更强,生活加油!!!