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

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在本例中为得到展示,比如能够指定样式等等。希望大家进一步学习。

原文发布于微信公众号 - Java帮帮(javahelp)

原文发表时间:2018-09-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何使用RabbitMQ和Python的Puka为多个用户提供消息

只有在安装和配置软件后,才能使用RabbitMQ发送和接收消息,安装教程可以参考CentOS安装RabbitMQ的教程。

17040
来自专栏FreeBuf

Sqlmap联合Nginx实现“地毯式”检测网站SQL注入漏洞

以安全防御方的角度来看,防御的广度比深度更具优先级,这也是信息安全中木桶原理的体现。 Sqlmap是一个开源的SQL注入漏洞检测工具,Nginx是高性能的WEB...

41780
来自专栏北京马哥教育

出了Linux 故障找不到方法?看大牛简单、朴实的解决思路

本文由马哥教育Linux云计算面授班23期学员推荐,转载自互联网,作者为Lis,Linux资深技术专家,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛...

46160
来自专栏闵开慧

hadoop图解

gateway机器是跳板机,提交job到云梯的,在gateway机器上只要配置hadoop-site.xml即可,配置文件中主要是指定jobtracker的地...

415100
来自专栏北京马哥教育

Linux 系统结构详解

Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管...

68730
来自专栏张首富-小白的成长历程

Linux软件包安装--三魔鬼

yum是基于rpm的软件包管理器,他可以使系统管理人员交互和自动化地更细与管理rpm包,他能自动从服务器下载RPM包并安装,他可以自动处理依赖关系,自动安装所有...

35420
来自专栏知识分享

android studio安装教程

19330
来自专栏安富莱嵌入式技术分享

【RL-TCPnet网络教程】第35章 FTP文件传输协议基础知识

本章节为大家讲解FTP(File Transfer Protocol,文件传输协议)的基础知识,方便后面章节的实战操作。

14110
来自专栏同步博客

Git服务器搭建

  Git是目前世界使用最广泛的分布式版本控制系统,它是由林纳斯·托瓦兹(Linus Torvalds)创作,最初的目的是为了更好地管理Linux内核开发而设计...

44630
来自专栏Hongten

HTTP协议

众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP、Archie Gopher等是建立在TCP/IP协议之上的应用层协议,不同的协议对...

14020

扫码关注云+社区

领取腾讯云代金券