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,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~
四、往期推荐🔥
- springboot系列(一):如何创建springboot项目及启动
- 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!
最后送大家两句我很喜欢的话,与诸君共勉!
☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。
🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。
💌如果文章对您有所帮助,就请留下您的赞吧!(#^.^#);
💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;
💗如果对文章有任何疑问,还请文末留言或者加群吧;
💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);
💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。
以上是关于springboot系列(二十四):如何实现Excel文件导出?这你得会 | 超级详细,建议收藏的主要内容,如果未能解决你的问题,请参考以下文章
springboot系列(二十四):如何实现Excel文件导出?这你得会 | 超级详细,建议收藏
(二十四)ATP应用测试平台——springboot集成fastdfs上传与下载功能
Spring Boot2 系列教程(二十) | SpringBoot 是如何实现日志的?