java使用freemarker+poi导出word文档

前提

嗯。。。做项目经常会碰到导出excel和word文档,相对来说导出excel更多一点,但是有时候的确不得不导出word文档(包含表格)。哎,咋办,做呗,然后开始百度。。一天一夜后终于完成。。。这里记录一下,让更多的人少走弯路,先说说我是咋做的,遇到的坑,看一下大家有没有碰到过,可以快速定位到问题,然后解决你的疑惑。

  1. 选择代码手写呢?还是用xml方式呢?
    网上搜索了一下,大概是有两种办法导出,一个是用代码手写???手写,那是不可能的。。然后另一种方法是xml,也就是使用freemarker,看到这种方法,那简直了,简单且好玩,然后选择了xml方式
  2. 我是先写上插值表达式呢?还是在xml中补上去呢?
    这一步是真的耗费精力和眼力,稍不留神,你就失败了,轻者样式错乱,重者无法救治。。我建议是先写上你要插入的属性名(后面会说到)
  3. 本地导出成功,但是服务器却无法输出到客户端,那不扯淡?
    我在本地测试成功,感觉完美了,但是服务器放上去之后,诶,我去,它导出到服务器了,而不是客户端,这就需要我们去把它搞下来了。
    小结:你是否遇到上面三个问题呢?没事,我在这里都会说明

第一步

准备好word模板,如图
模板图
注意:这里要特别注意几点,

  1. 一定要将你的样式调至完美哦,不然后续虽然导出会有差异,但是也是很小的,
  2. 一般来说,我们使用的变量替换是英文,word会自动检测你的英文拼写,这就有点狗血了,输出xml的时候它也会有提示的标签,改起来贼不舒服。
  3. 就是记得变量先不要加上${},因为如果你加上了的话,后续改起来还是很狗血,只有经历过才知道啊。。。心酸
  4. 就是不要去随便加回车啊啥的,xml里也会有,没必要给自己带来麻烦,尽量使用word的样式调整,别投机取巧

第二步

保存成xml格式文件,注意最好是英文名,毕竟后续要使用到这个名称

在这里插入图片描述
注意:这里需要提醒的是,这个xml可以保存为2003xml和word xml,我选择的是word xml ,当然我没试过2003xml,但我想其中应该只是不同版本的差别,具体操作不会变,大家还是按照word xml吧,毕竟都2020年了呢^ _ ^

第三步

这一步,你会开始头疼,因为要开始修改xml了,做好准备了吗?给大家推荐一个格式化工具foxechs,简单粗暴的格式化是你所需要的
首先你会看到这个图
xml
头晕吗?幸好有工具,当然你也可以用其他的,这里我只需要右键重新排版就行了,然后是下面的图
在这里插入图片描述
是不是舒服了?不难受啊

第四步

关键的一步,调好插值表达式,找到你所填充的变量处
在这里插入图片描述
修改之后
在这里插入图片描述
需要将所有的变量名加上${},不然freemarker无法识别的哦,大家会说,这多简单,当然,这看起来是很好看,但是如果你前面样式没调好,你就知道什么叫残忍,这里可能name 不是一起,而且标签包含n ,然后另一个标签包含ame,等等。这也是我为什么说要特别注重格式,这里很能体现出来。
遇到需要循环的数据咋办呢?
没错,我们肯定有这种需求,将一堆数据输出到内容区,
我们可以使用循环遍历,学过前端的应该都知道的,循环遍历标签,输出内容。

<#list taskList as task>
</#list>

解释说明:taskList 是我们通过代码传进来的值,而task就相当于taskList的元素,可以是一个对象,我们可以通过 task.name (name是你对象的属性)插入所需要的内容。
PS: xml标签跟前端标签差不多,需要看仔细,不然会出现样式错误的情况
这一章先介绍到这,下一章讲代码如何实现导出并且放置服务器上下载

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值