Springboot系列(十六):集成easypoi实现Excel的导入导出(实战篇二)
嗨,家人们,我是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成功了。
浏览器实际下载截图:
等待下载完成,我们打开excel文件,可以检查一下你代码中所设置的文件标题,字段名,字段长度,文件名等是否都设置成功了。
导出excel文件打开后实际截图如下:
可以看到,上方截图已经证明导出方法完全正确,所设置的内容都设置上了,比如每个字段的长度,就是按我所设置的width属性来进行展示的,就很nice。
但是记得之前有个伙伴说,使用postman也可以进行调用导出接口的啊,就是按我如下这样设置操作,输入url及请求方式,然后点击[Send and Download
]
但是提示保存到本地是个名称为[response.xls
]的文件,也不是按我所设置的fileName命名,我感觉大事不妙,肯定这不是正确的。
我打开文件也发现并没有我所list()查询出来的数据,就是一个空excel表格,被我预料到了。但是很好奇,为什么数据没有被写入呢?还是说我postman的打开方式不对?如果有遇到该问题的小伙伴又解决类似的问题,还请教教bug菌呀,一起交流学习哦。
... ...
以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~
四、往期热门推荐
- springboot系列(一):如何创建springboot项目及启动
- springboot系列(二):yaml、properties两配置文件介绍及使用
- springboot系列(三):多环境切换,实例演示
- springboot系列(四):stater入门
- springboot系列(五):史上最最最全springboot常用注解
- springboot系列(六):mysql配置及数据库查询
- springboot系列(七):如何通过mybatis-plus实现接口增删改查
- springboot系列(八):mybatis-plus之条件构造器使用手册
- springboot系列(九):mybatis-plus之如何自定义sql
- springboot系列(十):mybatis之xml映射文件>、<=等特殊符号写法
- springboot系列(十一):实现多数据源配置,开箱即用
- springboot系列(十二):如何实现邮件发送提醒,你一定得会(准备篇)
- springboot系列(十三):如何实现发送普通邮件?你一定得会
- springboot系列(十四):如何实现发送图片、doc文档等附件邮件?你一定得会
- springboot系列(十五):如何实现静态邮件模板发送?你一定得会
- springboot系列(十六):如何实现发送邮件提醒,附完整源码
- springboot系列(十七):集成在线接口文档Swagger2
- springboot系列(十八):如何Windows安装redis?你玩过么
- springboot系列(十九):如何集成redis?不会我教你
- springboot系列(二十):如何通过redis实现手机号验证码功能
- ... ...
文末🔥
如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。
我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!
感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。 时刻警醒自己: 抱怨没有用,一切靠自己; 想要过更好的生活,那就要逼着自己变的更强,生活加油!!!
转载自:https://juejin.cn/post/7065486101971992612