1、制作模板

先用office word做一个模板word文档,${usrName}、${nowDate}占位符

可以使用 office 或者 wps 先创建一个模板表格 (替换$部分可以在 模板格式改变之后 在替换xml 格式改了后有些原本的字符会分开)

2、用office word将模板word另存为xml

3、将xml文件的后缀改为.ftl

4、编辑.ftl文件

a、用${string}替换需要动态生成的数据,这一步在制作模板的时候就已经编写好了,这里不需要再编辑,需要主意的是在装换成xml文件的时候,占位符可能会被分成多个,如上面的${userName}可能会被分开成${userNam和e},这时需要把e}合到${userNam标签里面,并删除掉e}相关的标签。 也可以在这里进行替换 这样不用管分开的部分 b、表格循环用标签<#list table1 as object> (类似for (String[] object: table1 ){})

首先介绍几个标签,表格标签类似HTML的

,类似HTML的。每一个单元格,下面以表1为例子:

通过关键搜索找到表1的,在会有一些子标签,定义表格的一些格式,每一列的长度,我们不需要去修改标签的任何内容和格式,因为在制作模板的时候,已经设计好了。

的子标签还有,表示每一行的数据,所要做的是找到第二个(第一个是表格标题,固定的,不需要循环),然后删除掉第二个后面的,接下来将第二个包裹在循环标签<#list table1 as object> 内就行。

再接下来取出数据填充。依次找到、、、、(由于设计模板的时候,第四列里面的数据为空的,生成XML的时候是没有和,需要自己添加,建议设计模板的时候不要留空数据,避免这种情况出现),填充1(广州 || 37390379等)里面的数据,即将1改为${object[0]},object数组对象(<#list table1 as object> 中的object),0下标,很容易理解。

依照次方法修改其他的表格标签,至此模板已写完,接下来是编程部分。

package test.word;import java.awt.Desktop;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import freemarker.template.Configuration;
import freemarker.template.Template;public class Test {/*** 获取数据* @return* @throws Exception*/private static Map<String, Object> getData() throws Exception {Map<String, Object> map = new HashMap<String, Object>();map.put("userName", "admin");//对应模板中的${userName}map.put("nowDate", new Date().toString());//对应模板中的${nowDate}List<String[]> tablt1 = new ArrayList<String[]>();tablt1.add(new String[]{"1","广州","838973","--"});tablt1.add(new String[]{"2","佛山","115542","--"});tablt1.add(new String[]{"3","合计","955845","--"});map.put("table1", tablt1);//<#list table1 as object></#list>//其他数据return map;}public static void main(String[] args) throws Exception {createWord(getData(), "test.ftl", "F:/test/", "test"+System.currentTimeMillis()+".doc");}/*** * @param dataMap 数据* @param templateName 模板名称* @param filePath 保存文件路劲* @param fileName 保存文件名*/public static void createWord(Map<?, ?> dataMap, String templateName,String filePath, String fileName) {try {Configuration configuration = new Configuration();configuration.setDefaultEncoding("UTF-8");// ftl模板文件统一放至 test.ftl包下面configuration.setClassForTemplateLoading(Test.class, "/test/word/");// 获取模板Template template = configuration.getTemplate(templateName);File outFile = new File(filePath + File.separator + fileName);if (!outFile.getParentFile().exists()) {outFile.getParentFile().mkdirs();}// 将模板和数据模型合并生成文件Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));// 生成文件template.process(dataMap, out);out.flush();out.close();Desktop desktop = Desktop.getDesktop();desktop.open(new File(filePath + File.separator + fileName));} catch (Exception e) {e.printStackTrace();}}
}

resultmap 存入需要遍历到表格上去的数据 使用这个类里面的方法 传入参数配置好模板即可在浏览器页面实现 word导出功能

java占位符填充_Java使用freemark生成word相关推荐

  1. java占位符填充_Java占位符

    一.背景 在使用java开发的过程中,经常需要使用将字符串拼接到一起(比如,用于日志输出),常用方法如下: 使用+将不同字符串进行拼接 使用StringBuilder 使用String.format ...

  2. java占位符打印_java简单日志打印规范小记

    个人认为,如果公司一些基础类库不做约束,很可能"埋坑",形成技术债务,最终为此付出代价.本文讲解一个最基本的日志打印规范. 1. 日志打印组件 日志组件有很多,日志门面的选择有:S ...

  3. java占位符填充_程序员:深入理解Java虚拟机,对象的内存布局

    在 HotSpot 虚拟机中,对象在内存中存储的布局分为 3 块区域:对象头 ( Header ) .实例数据 ( InstanceData ) 和对齐填充 (Padding) . 一.对象的内存布局 ...

  4. java占位符填充_实现java中的占位符

    学习过.net MVC 的同学,都知道其中用一个文件share /_Layout.cshtml,它主要实现的是一个类似母版页(可以参照word的母版)的功能,那么在javaee中是否有类似的功能呢?其 ...

  5. java 占位符写法_java中占位符

    String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. form ...

  6. Java 占位符 例子 - 消息模板

    例子1: import java.text.SimpleDateFormat; import java.util.Date;import org.slf4j.Logger; import org.sl ...

  7. freemark生成word换行

    使用freemark生成word的时候,文本里的制表符会被自动解析为空格,要想实现换行效果的话可以使用<w:br/>标签

  8. java占位符打印_什么是 Java 构造器?

    构造器是编程的强大组件.使用它们来释放 Java 的全部潜力. -- Seth Kenlon(作者) 在开源.跨平台编程领域,Java 无疑(?)是无可争议的重量级语言.尽管有许多 伟大的跨平台 框架 ...

  9. Java占位符替换工具类

    import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFact ...

最新文章

  1. SpiderData 2019年2月27日 DApp数据排行榜
  2. jQuery lazyload插件详解和问题解答
  3. ddr布线 pads_DDR SDRAM布线规则
  4. WP7游戏开发:TweeJump(cocos2d-xna)
  5. python爬微信头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法
  6. DB中字段为null,为空,为空字符串,为空格要怎么过滤取出有效值
  7. Linux命令总结:file
  8. Spring REST实践之HATEOAS
  9. .ajax 上传图片,ajax图片上传并预览
  10. 创建一个MDK工程模板
  11. 负载均衡算法详解与实践
  12. 10 个超棒的 jQuery 视频插件
  13. cuda 各个版本下载
  14. 开源首发!Android入门“神器“——《Android编程入门教程》,理论与实战齐飞!
  15. 汽车can总线协议c语言,CAN总线自定义协议使用说明.pdf
  16. Ubuntu12.04解决集成HD3000显卡安装后系统详情显示图形 驱动 未知的方法
  17. 电梯管理php,楼道电梯管理的几种方式
  18. java毕业设计仓库管理系统Mybatis+系统+数据库+调试部署
  19. 狄利克雷原理及其应用
  20. 苏州大学计算机专业课872考研真题1999~2022含答案解析大纲专业课PPT 百度网盘分享 黄金典藏版

热门文章

  1. 变频器输出功率_100米的深井泵,如何接变频器,怎样控制
  2. 上证指数30年k线图_技术预判2020:上证指数要突破3500点才会“井喷”
  3. C语言灵魂——算法!
  4. hdu Caocao's Bridges(无向图边双连通分量,找出权值最小的桥)
  5. java中同步嵌套引起的死锁事例代码
  6. java的栈图形演示
  7. java post get 请求_java get post 请求
  8. hystrix 全局熔断_跟我学Spring Cloud(Finchley版)14Feign使用Hystrix
  9. php面向对象编程代码怎么写,php面向对象编程(一)
  10. 字符串固定长度 易语言_易语言字符串操作源码