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的更多相关文章

  1. freemarker导出word带图片

    导出word带图片 如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可以看到如下的一片base64编码后的代码: <w:binData w:nam ...

  2. freemarker导出word文档——WordXML格式解析

    前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...

  3. freemarker导出word文档

    使用freemarker导出word文档的过程 **************************************************************************** ...

  4. freemarker导出word档

    1.word另存为xml:2.xml文件后缀名改成ftl:3.编写完整json字符串备用:4.修改ftl中动态字段为json中对应字段名:5.编写java代码自动生成word文件:(注意:换行用< ...

  5. freemarker导出word的一些问题

    首先,了解下freemarker导出word的流程: 参考https://www.cnblogs.com/llfy/p/9303208.html 异常一: freemarker.core.ParseE ...

  6. 使用Freemarker导出Word文档(包含图片)代码实现及总结

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  7. java freemarker导出word时添加或勾选复选框

    最近项目导出word碰到一个需求,要求根据数据动态的决定word里的复选框是否勾选, 公司导出word用的是freemarker,相比较其他技术,freemarker可以很容易的控制输出样式, 在wo ...

  8. Java用freemarker导出word

    概述 最近一个项目要导出word文档,折腾老半天,发现还是用freemarker的模板来搞比较方便省事,现总结一下关键步骤,供大家参考,这里是一个简单的试卷生成例子. 详细 代码下载:http://w ...

  9. spring boot freemarker 导出word 带echarts图形报表

    创建word文件内容如下 将word导出为xml格式 将文件后缀名改为 .ftl 在springboot项目中添加freemarker依赖 <!-- 导出word文档--> <dep ...

随机推荐

  1. POJ 3608 旋转卡壳

    思路: 旋转卡壳应用 注意点&边  边&边  点&点 三种情况 //By SiriusRen #include <cmath> #include <cstdi ...

  2. MyEclipse日志文件目录

    MyEclipse存放日志的目录为: <Workspace_Root>/.metadata/.log 在该目录下存放了日志的存档和当前日志,通过该日志可以查看MyEclipse的错误信息.

  3. CSS之浮动元素

    <html> <head> <meta charset="utf-8"> <title></title> <sty ...

  4. kafka的topic命名技巧

    不多说,直接上干货!    比如,我们给kafka的topic命名为user_r2p10 表示user这个topic的副本因子(r)是2,分区数(p)是10. 这样后期在写消费者代码的时候,根据top ...

  5. 倒计时和div幻灯片

    倒计时从10秒开始,10秒之后,同意按钮可以使用. 设置一个区域背景,三张照片滚动显示,左右按钮可以下一张上一张,如果点击了左右按钮就不再自动滚动.

  6. 前端er怎样操作剪切复制以及禁止复制+破解等

    前言 有时候我们经常会碰到这些场景:玩掘金.知乎的时候复制一段文字,总是会在内容后面加上一些版权信息,以及像小说网站等都有禁止选中,禁止复制这种功能,还有点击自动复制账号的功能. 我也经常遇到这些场景 ...

  7. PHP——基本使用(一)

    Apache安装与配置 install 下载地址:https://www.apachelounge.com/download/,选择2.4.33版本64位 将程序解压到一个英文目录下,以管理身份打开c ...

  8. js获取图片信息(一)-----获取图片的原始尺寸

    如何获取图片的原始尺寸大小? 如下,当给 img 设置一个固定的大小时,要怎样获取图片的原始尺寸呢? #oImg{ width: 100px; height: 100px; } <img src ...

  9. 模板TemplateRef

    TemplateRef<void> <ng-template #模板名称></ng-template>

  10. Python学会之后,一般能拿到多少工资?

    Python在约40年前出现以来,已经有数以千计基于这项技术的网站和软件项目,Python因其独有的特点从众多开发语言中脱颖而出,深受世界各地的开发者喜爱. 随着Python的技术的流行,Python ...