原文地址:https://chendd.cn/information/viewInformation/other/257.a

除了前篇文章中讲到的编程式创建表格外,基于模板实现的列表表格也是非常常用或者有用的,前面的文章中我也说过关于模板我只实现基于jxel模板引起的解析方式,故本篇文章中的示例为实现一个静态表格数据和动态循环列表数据的实现,以及基于模板式表格的样式调整,参考模板截图如下:

代码实现为:

package cn.chendd.docx4j.examples;

import java.io.File;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.docx4j.Docx4J;

import org.docx4j.TraversalUtil;

import org.docx4j.XmlUtils;

import org.docx4j.finders.ClassFinder;

import org.docx4j.openpackaging.packages.WordprocessingMLPackage;

import org.docx4j.wml.Tbl;

import org.docx4j.wml.Tr;

public class TableTemplateTest {

public static void main(String[] args) throws Exception {

String templatePath = System.getProperty("user.dir") + "/template/模板式表格_template.docx";

String outPath = System.getProperty("user.dir") + "/template/out/模板式表格.docx";

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(newjava.io.File(templatePath));

HashMap<String, String> mappings = new HashMap<String, String>();

//构造非循环格子的表格数据

mappings.put("name", "马参军");

mappings.put("sex", "男");

mappings.put("skill", "散谣:三人成虎事多有");

//构造循环列表的数据

ClassFinder find = new ClassFinder(Tbl.class);

new TraversalUtil(wordMLPackage.getMainDocumentPart().getContent(), find);

Tbl table = (Tbl) find.results.get(1);

Tr dynamicTr = (Tr) table.getContent().get(1);//第二行约定为模板

String dynamicTrXml = XmlUtils.marshaltoString(dynamicTr);//获取模板行的xml数据

List<Map<String , Object>> dataList = getDataList();

for (Map<String, Object> dataMap : dataList) {

Tr newTr = (Tr) XmlUtils.unmarshallFromTemplate(dynamicTrXml, dataMap);//填充模板行数据

table.getContent().add(newTr);

}

//删除模板行的占位行

table.getContent().remove(1);

wordMLPackage.getMainDocumentPart().variableReplace(mappings);//设置全局的变量替换

Docx4J.save(wordMLPackage, new File(outPath));

}

//构造循环数据

private static List<Map<String , Object>> getDataList() {

List<Map<String , Object>> dataList = new ArrayList<Map<String , Object>>();

Map<String , Object> m1 = new HashMap<String , Object>();

m1.put("item.number", "1");m1.put("item.name", "关银萍");

m1.put("item.sex", "女");m1.put("item.skill", "来吧,青龙偃月刀");

dataList.add(m1);

Map<String , Object> m2 = new HashMap<String , Object>();

m2.put("item.number", "2");m2.put("item.name", "马云禄");

m2.put("item.sex", "女");m2.put("item.skill", "啥玩意,手里方片摸牌,占位占位看到换行的样式效果,占位占位看到换行的样式效果");

dataList.add(m2);

Map<String , Object> m3 = new HashMap<String , Object>();

m3.put("item.number", "3");m3.put("item.name", "张星彩");

m3.put("item.sex", "女");m3.put("item.skill", "长缨在手,擦擦擦擦");

dataList.add(m3);

return dataList;

}

}

生成文件为:

 示例生成文件下载

模板式表格.docx

最新文章

  1. Python元组
  2. Sqlite3常用的插入方法及性能测试
  3. Android自定义属性
  4. JavaScript-cookie是客户端本地,持久存储用户私密数据的文件
  5. MySQL 基础语句的练习
  6. SPOJ DISUBSTR 后缀数组
  7. DOM(八)使用DOM控制表单
  8. angular的DEMO(用来练习和顺便看看)
  9. hdu.5195.DZY Loves Topological Sorting(topo排序 &amp;&amp; 贪心)
  10. android 屏幕适配 课程笔记
  11. jQuery弹出窗口完整代码
  12. 利用python 实现微信公众号群发图片与文本消息功能
  13. PHP文件上传处理
  14. Python之作用域
  15. Struts标签库详解【2】
  16. nginx常用服务配置
  17. 一本通1587【例 3】Windy 数
  18. java 集合(三)List接口
  19. ​ 用一个开发案例详解Oracle临时表
  20. 学生管理系统.c

热门文章

  1. 普通脚本调用django程序
  2. unittest管理用例生成测试报告
  3. Centos6.5基于GPT格式磁盘分区
  4. Codeforces I. Producing Snow(优先队列)
  5. Linux下能访问Nginx,本地无法访问
  6. destoon系统开发-最新利用浏览器的cookie 做历史浏览记录
  7. 【Redis】远程访问不了
  8. Linux 系统结构,nglinx
  9. 珠峰培训node 珠峰爬虫| cron 定时任务
  10. js 递归 汉诺塔的例子