关于使用freemarker导出word
java使用FreeMarker导出word
一、 先做一个word模板
二、 将该word文件另存为xml格式(注意是另存为,不是直接改扩展名)
三、 打开xml文件把要导出的文字都加上${xxx} 例如:${bianhao}
导出表格要在目标行(例如:bianhao这一行)的<w:tr></w:tr>标签包一个<#list xxx as xxx></#list> 例如:<#list userlist as userlist >标签,把要导出的文字都加上${ userlist . xxx} 例如:${ userlist . bianhao },保存后把xml文件后缀名改成 .ftl
四、 将文件保存到指定的文件夹下,在pom文件中导入FreeMarker.jar
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
五、 Java代码如下(这里是一个测试方法)
import freemarker.template.Configuration;
import freemarker.template.TemplateException; import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class WordTest {
private Configuration configuration = null; public WordTest(){
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
} public static void main(String[] args) {
WordTest test = new WordTest();
test.createWord();
} public void createWord(){
Map<String,Object> dataMap=new HashMap<String,Object>();
getData(dataMap);
//模板文件所在路径
// configuration.setClassForTemplateLoading(this.getClass(), "");
try {
configuration.setDirectoryForTemplateLoading(new File("D:\\IdeaProjects\\SpringMVC\\src\\word"));
} catch (IOException e) {
e.printStackTrace();
}
freemarker.template.Template t=null;
try {
//获取模板文件
t = configuration.getTemplate("test.ftl");
} catch (IOException e) {
e.printStackTrace();
}
//导出文件
File outFile = new File("D:/outFile"+Math.random()*10000+".doc");
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} try {
//将填充数据填入模板文件并输出到目标文件
t.process(dataMap, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} private void getData(Map<String, Object> dataMap) {
dataMap.put("a", "/");
dataMap.put("b", "名称");
dataMap.put("c", "性别");
dataMap.put("d", "电话");
dataMap.put("e", "邮箱");
dataMap.put("f", "职位");
dataMap.put("A", "/");
dataMap.put("B", "名称");
dataMap.put("C", "经理");
dataMap.put("D", "电话");
dataMap.put("E", "邮箱"); List<Map<String,Object>> userlist = new ArrayList<Map<String,Object>>();
for (int i = 0; i < 50; i++) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("bianhao", i);
map.put("name", "刘慧文"+i);
map.put("sex", "男"+i);
map.put("phone", "15122693135"+i);
map.put("email", "1305156911@qq.com"+i);
map.put("zhiwei", "开发工程师"+i);
userlist.add(map);
}
List<Map<String,Object>> deptlist = new ArrayList<Map<String,Object>>();
for (int i = 0; i < 50; i++) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("BIANHAO", i);
map.put("NAME", "刘慧文"+i);
map.put("JINGLI", "张经理"+i);
map.put("PHONE", "15122693135"+i);
map.put("EMAIL", "1305156911@qq.com"+i);
deptlist.add(map);
} dataMap.put("userlist", userlist);
dataMap.put("deptlist", deptlist);
}
}
六、 导出效果
关于使用freemarker导出word的更多相关文章
- freemarker导出word带图片
导出word带图片 如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码: <w:binData w:nam ...
- freemarker导出word文档——WordXML格式解析
前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...
- freemarker导出word文档
使用freemarker导出word文档的过程 **************************************************************************** ...
- freemarker导出word档
1.word另存为xml:2.xml文件后缀名改成ftl:3.编写完整json字符串备用:4.修改ftl中动态字段为json中对应字段名:5.编写java代码自动生成word文件:(注意:换行用< ...
- freemarker导出word的一些问题
首先,了解下freemarker导出word的流程: 参考https://www.cnblogs.com/llfy/p/9303208.html 异常一: freemarker.core.ParseE ...
- 使用Freemarker导出Word文档(包含图片)代码实现及总结
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- java freemarker导出word时添加或勾选复选框
最近项目导出word碰到一个需求,要求根据数据动态的决定word里的复选框是否勾选, 公司导出word用的是freemarker,相比较其他技术,freemarker可以很容易的控制输出样式, 在wo ...
- Java用freemarker导出word
概述 最近一个项目要导出word文档,折腾老半天,发现还是用freemarker的模板来搞比较方便省事,现总结一下关键步骤,供大家参考,这里是一个简单的试卷生成例子. 详细 代码下载:http://w ...
- spring boot freemarker 导出word 带echarts图形报表
创建word文件内容如下 将word导出为xml格式 将文件后缀名改为 .ftl 在springboot项目中添加freemarker依赖 <!-- 导出word文档--> <dep ...
随机推荐
- springmvc中的web.xml配置(包含中文乱码解决)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...
- [转]mysql的查询、子查询及连接查询
转自:http://www.cnblogs.com/rollenholt/archive/2012/05/15/2502551.html 一.mysql查询的五种子句 where(条件 ...
- 为什么,博主我要写下这一系列windows实用网络?
发现,随着自身一路过来所学,无论在大数据领域.还是linux or windows里,菜鸟的我慢慢在长大.把自己比作一个园,面积虽在增加,涉及面增多,但圆外的东西,还是那么多. 现在,正值在校读研 ...
- maven idea
写在前面的话:此篇文章教程是在IntelliJ IDEA中搭建的maven项目.(建议eclipse党快点转IDEA吧,IDEA大法好.逃… 1.maven的安装 前往Apache Maven官网点击 ...
- js中获取class封装
1.封装 //封装getClass function getClass(tagName,className) //获得标签名为tagName,类名className的元素 { if(document. ...
- 由DB2分页想到的,关于JDBC ResultSet 处理大数据量
最近在处理DB2 ,查询中,发现如下问题.如果一个查询 count(*),有几十万行,分页如何实现 select row_number() over (order by fid desc ) as r ...
- iOS显示一张图片 Objective-C
图片文件放在项目目录下 #import "ViewController.h" @interface ViewController () @end @implementation V ...
- Android Studio 入门 Hello World
Android Studio 入门 Hello World Gavin要加油 1.5k 6月22日 发布 推荐 1 推荐 收藏 17 收藏,2.1k 浏览 引言 前两天开始学习android开发,本来 ...
- HDU_1074_Doing Homework_状态压缩dp
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 Doing Homework Time Limit: 2000/1000 MS (Java/Othe ...
- Django基础核心技术之Model模型的介绍与设计
Django基础核心技术之Model模型的介绍与设计原创: Yunbo Shi Python Web与Django开发 2018-05-03Django网络应用开发的5项基础核心技术包括模型(Mode ...