springboot系列(二十五):如何实现单word模板分多页导出?这你得会|超级详细,建议收藏
Posted bug菌¹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot系列(二十五):如何实现单word模板分多页导出?这你得会|超级详细,建议收藏相关的知识,希望对你有一定的参考价值。
👨🎓作者:bug菌
🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。
🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。
嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!
小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章 点亮👍吧,您的点赞三连( 收藏⭐️+关注👨🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻♀️,创作不停💕,加油☘️
一、前言🔥
前几期呢,我们主要是讲了如何集成easypoi实现excel的导入导出功能,对吧。不知道你们掌握的如何,如果还对以下任意一篇有疑问,还请大家多多提问,哈哈哈,虽然不是什么大佬,但是我会尽全力相授,一起学习查缺补漏。
- springboot集成EasyPoi(环境准备篇)
- 如何实现Excel文件的导入?
- 如何实现Excel文件的导出?
- 如何实现单word文档模板分页导出?
- 如何实现word文件模板导出单页?
- 如何实现word文件带图片导出?
- 如何实现excel文件带图片导出?
- 如何实现excel文件多sheet导入?
- 如何实现excel文件多sheet导出?
- 如何实现excel模板导出成pdf文件?
- ... ...
但是日常,除了导出excel,还很大几率需要接触到word的导入导出、pdf导出等其他格式的文档导出导出业务,比如把数据导出到word文档中且本地下载,最常见的一个应用场景:用户个人档案导出。
场景:就是先定一个word模板,然后将个人数据进行自动填充到模板上,最后导出成word文档,代替人工手填的一个过程。这个需求我以前在开发人事OA系统的时候摸过,还是挺有意思的,所以今天我就打算带着大家从零摸索,实现一个单word模板导出多页数据的功能 ,可以吧?
接下来我就开始讲啦,同学们可得竖起耳朵好好听讲哦~
二、引入pom依赖🔥
由于EasyPoi可以很方便的通过一个word模板,然后通过填充模板的方式生成我们想要的word文档。所以我们今天依旧是基于easypoi来实现word文档导出。
<!--easypoi依赖,excel导入导出--><dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.2.0</version>
</dependency>
三、实现word导出🔥
1️⃣先定义一个word模板文件
我还是以用户类进行导出吧,所以我就在word中创建一个表格, 表格输出某个用户或者所有用户的详细信息。所以我指定的word模板文件如下:
2️⃣确定模板取值命名
你在进行模板自动填值的过程中,就得通过唯一命名来进行赋值了,所以你需要在你word模板中进行取值,而取值就是直接name,其中name就是你所给该位置需要取值的字段名。
简言之采用的写法就是代表表达式,然后根据表达式里面的数据取值。
比如如下:
3️⃣Controller添加word导出方法
我们先来定义一个word文档导出方法,目的是提供一个口子,好方便自己通过浏览器访问进行测试。
/**
* word文档导出
*/
@GetMapping("export-word")
@ApiOperation(value = "word文档导出", notes = "word文档导出")
public void exportUsersToWord(HttpServletResponse response) throws Exception
userService.exportUsersToWord(response);
不需要任何返回值及参数,你只需要携带你调用接口时的请求HttpServletResponse
即可
4️⃣定义导入接口
/**
* word文档导出
*/
void exportUsersToWord(HttpServletResponse response) throws Exception;
5️⃣实现导出方法(核心)
如下这个导出实现类就很关键了,我们就可以直接使用easypoi提供的exportWord07()
方法,该方法就可以将你的数据进行赋值转化到指定的word模板中。详细使用请参考我写的:
代码具体设置如下:
/**
* word文档导出
*/
@Override
public void exportUsersToWord(HttpServletResponse response) throws Exception
//准备导出数据
List<Map<String, Object>> listUsers = new ArrayList<>();
//查询所有用户数据
List<UserEntity> users = this.list();
users.forEach(user ->
//一个map就对应一个模板
Map<String, Object> map = new HashMap<>();
map.put("name", user.getName());
map.put("age", user.getAge());
map.put("sex", user.getSex());
map.put("address", user.getAddress());
map.put("describes", user.getDescribes());
//添加
listUsers.add(map);
);
//导出word并指定word导出模板
XWPFDocument doc = WordExportUtil.exportWord07("./template/用户导出模板.docx", listUsers);
//设置编码格式
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
//设置内容类型
response.setContentType("application/octet-stream");
//设置头及文件命名。
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("学生基本信息表.docx", StandardCharsets.UTF_8.name()));
//写入
doc.write(response.getOutputStream());
其中,第一点你们需要注意的就是,一般word文档是放于指定服务器位置上的或者放于项目中,我是直接在项目根目录下创建了一个名为:template的文件夹,专门用于存放指定模板类的文件,否则直接引用本地绝对位置文件,换台电脑或者其他同事本地跑就不是很方便。
如下是我项目template 文件夹位置实际截图:
第二点就是,指定下载文件名及指定response的请求类型,意味着告诉浏览器你是在干一件什么类型的事,所以设置response.setContentType("application/octet-stream").
接下来word导出方法我们就已经写完了,剩下的就是进行对应的测试啦。
6️⃣浏览器测试接口
我们打开浏览器,在地址栏,输入我们刚才在Controller暴露出来的接口地址:
比如我的:http://localhost:8080//user/export-word 你按你的接口地址进行访问即可。
输入完直接回车,可以看到有一个文件正在被下载,剩下的就看内容是否被回填了。
如上图所示,看到数据填写的正是数据库的一条数据,这就说明导出word模板方法是没有问题的。
下载完打开一看,很nice所有的用户信息都获取到了,一个map对应的就是一个word模板文档,总共查询到了9个用户,但是这里总共分了10页,最后一页是空白页,啥内容也没有,不知道究竟是什么?如果有知道的小伙伴,欢迎交流啊,互相学习~
但是一般情况下我们是不会全部都进行word写出的,一般都是携带用户唯一id查询数据然后再进行导出,这样用户信息就只有一条!这就看需求啦,有的可能是导出所有内容,就看针对的用户需求是什么,不过这肯定很好调整啊,也可以更贴近用户想法,导出多少条,由用户自己来控制就好了,有的是按页导出,有的是按条导出等。
当然,还有就是对于一个模板导出所有数据的实现功能,我将在下期进行讲解。
... ...
ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~
四、往期推荐🔥
...未完待续,后期会更新
五、文末🔥
如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。
我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!
最后送大家两句我很喜欢的话,与诸君共勉!
☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。
🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。
💌如果文章对您有所帮助,就请留下您的赞吧!(#^.^#);
💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;
💗如果对文章有任何疑问,还请文末留言或者加群吧;
💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);
💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。
以上是关于springboot系列(二十五):如何实现单word模板分多页导出?这你得会|超级详细,建议收藏的主要内容,如果未能解决你的问题,请参考以下文章
springboot系列(二十五):如何实现单word模板分多页导出?这你得会|超级详细,建议收藏
springboot系列(二十六):如何实现word模板单页导出?这你得会|超级详细,建议收藏
springboot系列(二十六):如何实现word模板单页导出?这你得会|超级详细,建议收藏
springboot系列(二十六):如何实现word模板单页导出?这你得会|超级详细,建议收藏