分享

Java模板生成word文档/POI生成Excel【面试+工作】

 Java帮帮 2020-01-02


Java模板生成word文档/POI生成Excel【面试+工作】

java后台利用模板生成Word文档提供前台下载


首先要指出的是,实现的思路和freeMarker差不离,将.doc的文档做相应的转换后转为.ftl文档,其中的变量会以${xxx}来代替,这样就可以

使用freeMarker模板引擎来替换变量啦为例,动态生成文件后发送到浏览器端提供用户下载。所以,实现该功能分为以下几个步骤,以我的

项目为例,一些敏感的信息可能不予展示,但不影响该功能的学习。

1.为你的项目导入freeMarker包

我的项目是依靠maven来维护依赖的,所以引入很方便,只需要在pom文件中加入下面这个依赖就好

如果还是比较传统的话,就像那个链接里的项目一样,把jar包导入项目吧

2.依据模板动态生成word文档,首先你得有个模板

模板是doc类型就好,注意不是docx,docx没有尝试,doc类型已经满足了我的需求,朋友们如果尝试成功了可以告诉我一下

test.doc,注意“产品品质证明书”是一张图片哦,图片会漂亮的留在生成的新文档中。将变量替换成${xxx}即可,这里只选了两

个变量

3.点击 文件->另存为 将test.doc保存为xml类型,即 Word XML文档 .xml类型 ,得到test.xml

4.用notepad或者sublime打开test.xml,你会发现${xxx}会被分割成${*********xxx********)的样子,将*******删除,保证它又成了完整的变量

标签,像这样

5.将文件已utf-8编码保存,另存为为.ftl,找不到该格式直接改文件后缀名就行,这样得到test.ftl

6.前台触发事件

我的项目是基于SpringMVC的,所以前台触发只需要在view层的文件里加个按钮事件即可,直接上代码

7.后台生成文件,并返回给客户的浏览器

这里又分为两步

a.controller层接收请求,根据参数拼凑数据,放在map中

b.工具类WordUtils利用传来的map和将要返回给用户的HTTPServletReponse,将map里的数据和模板中${xxx}标签对应的变量值填入,

生成新的文档,通过response返回给浏览器并提供用户下载

8.可以运行试试看啦,给你看我生成的新文档

java后台利用Apache poi 生成excel文档提供前台下载


Apache poi。它是用Java编写的免费开源的跨平台的 Java API,提供API给Java程式对Microsoft Office格式档案读和写的功能。想要实现这个功能,就按照下面的步骤来做吧,为了方便起见,我直接拿项目中遇到的实例来举例说明,是的,我在写这篇博客的时候同时也在完成手上的项目。

step1:创建xls格式的模板

表头含有我的甲方信息就打码了,可以看到我搞了一个空的模板文件,现在有很多东西需要在后台填入

step2:前台触发事件

搞一个按钮,用户点击的时候用JavaScript的window.location.href将页面重定向到你处理下载的URL去

比方说,这是我项目的前台,看到那个表面质量按钮吗,来看一下当它被点击的时候调用的函数

有朋友可能想用什么Ajax来发送请求,我反正是没搞出来,挺麻烦的,网上找的相关解决方案也都比较蛋疼,因此不传什么复杂的敏感的参数,就这么写就可以。

step3:后台处理

首先你当然要把Apache poi那一套东西引入你的项目啦,我的项目是Maven项目,添加依赖很容易

然后,为了方便导出Excel,在项目中建了一个ExcelUtils工具类,后面给出源码,这么一来导出Excel会变得更简单。ExcelUtils里面除了一些既定的方法外,还有就是你具体怎么去操作模板的方法了。当然你用的少的话可以不用我这工具类,而是在你需要的时候import相关的类,然后在你处理的时候就把操作模板的逻辑写进去也可以。但我这个项目很多次用到导出Excel,所以抽象出一个工具类是很有必要的,符合设计模式。

我的项目是基于SpringMVC的,来看看我后台接收到请求以后做了些什么吧

Controller:

最后调用ExcelUtils里的相关导出方法,这个方法是自定义的,它定义的是怎样去操作模板

自定义的方法:

ExcelUtils:

step4:启动项目,然后测试一下,看!完美的导出了。。。有图为证

嗯嗯,文章写到这里就结束啦,Apache poi还提供了很多API在本例中为得到展示,比如能够指定样式等等。希望大家进一步学习。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多