1、word表格的模板


另存为xml格式:

将保存的xml改成.ftl

格式化一下xml,看看文件中的带有${}是否正确
如果出现这种情况,手动修改下(可复制上一个正确的改下名字)

2、Java代码

1、需要导入freemarker的包

<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.20</version></dependency>

2、代码编写(非循环)

public void createDoc(Map<String,Object> dataMap,String templateName,String filePath) {Configuration configuration = new Configuration();configuration.setDefaultEncoding("UTF-8");// 设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,// 这里我们的模板是放在当前类包下面的template文件夹下configuration.setClassForTemplateLoading(this.getClass(),"template");// 输出文档路径及名称File outFile = new File(filePath);Writer out = null;try {// test.ftl为要装载的模板Template t = configuration.getTemplate(templateName);//设置模板编码方式t.setEncoding("utf-8");out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));t.process(dataMap, out);out.close();} catch (Exception e) {e.printStackTrace();}  finally {try {out.close();} catch (IOException e) {e.printStackTrace();}}}public static void main(String[] args) {OaMeetingMinutesServiceImpl service = new OaMeetingMinutesServiceImpl();// 要填入模本的数据文件Map<String,Object> dataMap = new HashMap<>();dataMap.put("week", "周一");dataMap.put("name", "张三");dataMap.put("date", "6.11");dataMap.put("content", "哈师大");service.createDoc(dataMap,"test.ftl","D:/test.doc");System.out.println("end");}

结果:

3、循环导出

在要循环的列上加上

注意结束标签

数据做相应的修改

测试:

public static void main(String[] args) {OaMeetingMinutesServiceImpl service = new OaMeetingMinutesServiceImpl();// 要填入模本的数据文件Map<String,Object> dataMap = new HashMap<>();List<User> list = new ArrayList<>();User user = new User();user.setWeek("周一");user.setName("张三");user.setDate("6.22");user.setContent("畜栏里");list.add(user);User user1 = new User();user1.setWeek("周二");user1.setName("李四");user1.setDate("6.23");user1.setContent("畜栏d地方里");list.add(user1);dataMap.put("userList", list);service.createDoc(dataMap,"test.ftl","D:/test.doc");System.out.println("end");}

结果:

4、循环导出并合并单元格

在要合并的一列上加入下面截图中的标签

测试:我这里合并的是星期一列

xml中的判断:

<w:tcPr><w:tcW w:w="2130" w:type="dxa"/><#if user.strMap.now == "1"><#if user.strMap.pre == "0"><w:vMerge w:val="restart"/><#else><w:vMerge/></#if><#else><#if user.strMap.pre != "0"><w:vMerge/></#if></#if></w:tcPr>

Java代码:

public static void main(String[] args) {OaMeetingMinutesServiceImpl service = new OaMeetingMinutesServiceImpl();// 要填入模本的数据文件Map<String,Object> dataMap = new HashMap<>();List<User> list = new ArrayList<>();User user = new User();user.setWeek("周一");user.setName("张三");user.setDate("6.22");user.setContent("畜栏里");list.add(user);User user1 = new User();user1.setWeek("周一");user1.setName("李四");user1.setDate("6.23");user1.setContent("畜栏d地方里");list.add(user1);User user2 = new User();user2.setWeek("周一");user2.setName("李四1");user2.setDate("6.211");user2.setContent("畜栏d地方1里");list.add(user2);User user3 = new User();user3.setWeek("周二");user3.setName("李四11");user3.setDate("6.2111");user3.setContent("畜栏d地方11里");list.add(user3);User user4 = new User();user4.setWeek("周二");user4.setName("李四111");user4.setDate("6.21111");user4.setContent("畜栏d地方111里");list.add(user4);for(int i =0;i<list.size();i++){list.get(i).getStrMap().put("pre","0");list.get(i).getStrMap().put("now","0");list.get(i).getStrMap().put("next","0");if(i<list.size()-1){//当前和下一个相同就合并,将now设置为1if(list.get(i).getWeek().equals(list.get(i+1).getWeek())){list.get(i).getStrMap().put("now","1");}}}for(int i=0;i<list.size();i++){//保存他的前一个元素是否需要合并if(i>0){list.get(i).getStrMap().put("pre",list.get(i-1).getStrMap().get("now"));}//保存他的后一个元素是否需要合并if(i<list.size()-1){list.get(i).getStrMap().put("next",list.get(i+1).getStrMap().get("now"));}}dataMap.put("userList", list);service.createDoc(dataMap,"test.ftl","D:/test.doc");System.out.println("end");}

说明:我这里采用了两次循环的方法合并,仅供参考

测试结果:

Java中利用freemarker导出word表格并合并单元格相关推荐

  1. python合并word表格单元格_python docx模块读取word表格遇到合并单元格时的处理

    python docx模块读取word表格遇到合并单元格时的处理 python docx模块读取word表格遇到合并单元格时的处理 python docx模块读取word表 遇到合并单元格时的处理 通 ...

  2. Java之利用FreeMarker导出Word实例

    开心一笑 感冒了很难受,她闷在被窝里给男朋友发短信"我感冒了-"并决定如果对方回答"多喝点水"就一脚踹了他.过一会儿手机振动起来,短信内容:"开门."--这个大笨蛋!谁让他来的啦!她起身用最快的速度冲 ...

  3. java word合并单元格_java使用freemarker模板导出word(带有合并单元格)文档

    前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并单元格的,可是查了好久都没有自己想要的.研究了几天其实挺简单的,在这儿我就简单的介绍一下吧!(此方法只是一种思路,借鉴者还有 ...

  4. html中表格怎么合并单元格居中,word表格怎么合并单元格居中

    在excel中,合并.拆分单元格是经常会用到的.而在word文档中,偶尔我们也需要插入表格,然后编辑表格,那么如何对word中的表格单元格进行合并.拆分呢? 一.如何在word中创建表格 1.选择&q ...

  5. python 生成word表格(合并单元格)

    本人使用pycharm,安装库python-docx 代码: from docx import Document from docx.shared import Inches, Pt from doc ...

  6. SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格、合并单元格)

    本编文章继SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格)文章之后 介绍Poi-tl导出word的延伸功能: 所需依赖以及word模板所属位置 见 SpringBoo ...

  7. Java中利用freemarker模板动态生成word含表格

    最近公司有导出word的需求,由于word的样式有的很复杂所以记录一下Java中利用freemarker模板动态生成word含表格,以防以后忘记. 1.word表格的模板 删掉无用的数据留下基础的样式 ...

  8. java 如何将word 转换为ftl_Java之利用FreeMarker导出Word实例

    开心一笑 感冒了很难受,她闷在被窝里给男朋友发短信"我感冒了..."并决定如果对方回答"多喝点水"就一脚踹了他.过一会儿手机振动起来,短信内容:"开门."......这个大笨蛋!谁让他来的啦!她起身用 ...

  9. java中使用jxl导出excel表格的工具类(全网唯一亲测可用,在原来基础上扩展)

    java中后台导出excel的话,有两种方案,一是使用poi(不过由于是windows版本的,存在不兼容,但功能更多,更强大),而是使用jxl(纯java编写,不过兼容,简单一些),可以设置输出的ex ...

最新文章

  1. 通过先序和中序数组生成后续数组
  2. 技术讨论 | 一次尚未完成的薅羊毛行动
  3. 深度探讨 CrossFormer 如何解决跨尺度问题
  4. how is view embedded via component usage being initialized
  5. 电子报账系统源码_网上商城系统建设心得,轻松搞定选择困难
  6. 9.带有返回值的函数
  7. jvm学习笔记(1)——java虚拟机内存区域
  8. python解释器的提示符是shell嘛_windows python3.2 shell环境(python叫做解释器)
  9. [ 转载 ]微信小程序font-family
  10. Mac下驱动BCM20702A0 USB蓝牙
  11. android终端模拟器 apt,借贵吧问个安卓终端模拟器的问题
  12. lisp画弯箭头_在CAD中直接用命令画箭头
  13. MATLAB去除数据中的异常值、离群值
  14. java+vue3实现生成、验证图形验证码,和手机短信验证码
  15. PotPlayer打开视频没声音,显示DirectX有问题或者音频禁用怎么办?
  16. 电脑壁纸该换了,mac必备壁纸软件Dynamic Wallpaper
  17. 强大的web电子表格控件dhtmlxSpreadsheet免费下载地址
  18. 各路大神对于观测器的文章总结【持续更新】
  19. Oracle同义词创建及其作用
  20. java并发锁有哪些,Java并发编程-公平锁与非公平锁

热门文章

  1. 电商打折套路分析 —— Python数据分析练习
  2. 面经手册 · 第12篇《面试官,ThreadLocal 你要这么问,我就挂了!》
  3. songtest 歌曲下载 器
  4. 对英雄联盟比赛预测(三)- 数据获取Java实现
  5. golang_微信公众号网页授权
  6. SpringBoot打成jar包部署,Excel模板下载文件损坏,提示恢复问题处理
  7. 工作 7 年的老程序员,现在怎么样了
  8. 工业大数据分析建模和算法
  9. 在计算机上知道手机密码,不知道密码查手机通话记录:傻瓜式教程
  10. ecshop打开手机端QQ对话窗口