根据模板导出word,复合格式表格生成、可变列表格生成
系列文章目录
第一章:springboot下生成复杂word文档方案 在Word软件里面制作模板
第三章:doc和docx插入多图
第四章:web环境下word文档预览
根据模板导出word,复合格式表格生成、可变列表格生成
- 系列文章目录
- 前言
- 复合格式表格
- 一、拆解word xml文档标签
- 表格遍历逻辑
- 数据结构定义
- 二、结果
- 一行数据
- 二行数据
- 多行数据
- 变长列格式表格
- 拆解逻辑
- 数据结构定义
- 总结
- 代码仓库
前言
这次我们来实现复合格式表格和可变列表格,效果如下
以下是本篇文章正文内容,下面案例可供参考
复合格式表格
一、拆解word xml文档标签
按照要求我们可以将表格按行为单位拆分
为四种格式的表格行;
这个时候我们在xml模板文件里面保留这四行来使用。
表格遍历逻辑
<w:tbl>
<!-- 表头行 begin --><w:tr>...</w:tr>
<!-- 表头行 end --><#list complexTable.rows as tableRow><#if !tableRow_has_next><!-- 表内容尾行 begin --><w:tr>...</w:tr><!-- 表内容尾行 end --><#elseif tableRow_has_next && tableRow_index == 0 ><!-- 表内容首行 begin --><w:tr>...</w:tr><!-- 表内容首行 end --><#else ><!-- 表内容中间行 begin --><w:tr>...</w:tr><!-- 表内容中间行 end --></#if></#list></w:tbl>
上面的代码逻辑可以兼容一条数据,二条数据和多行数据的情况下格式不会乱,运行效果请看下面测试结果。
数据结构定义
{"columns": ["列名1","列名2"],"rows": [{"cell1": "小红","cell2": "女"},{"cell1": "小明","cell2": "男"}......{"cellFinal": "啦啦啦啦,我可以随意定义字段,只要复合模板拆分逻辑即可"}]
}
row里面最后一行的数据结构跟上面不相同,而实际上定义为相同也可以,只不过按照我们的拆解逻辑来讲,最后一行只取一个字段,所以我定义了另一种结构来存储,其实只要在模板里面能取到即可。
二、结果
一行数据
二行数据
多行数据
变长列格式表格
表格的列数不固定的表格。
拆解逻辑
变长列数的表格主要是在行内部再加一个list循环
,然后以列为单位控制格式
,一般只需要控制每行的最左面和最后面一列即可。
<w:tbl>
<!-- 表头行 begin --><w:tr><#list complexTable.columns as column><w:tc>...<w:t>${column}</w:t>...</w:tc></#list></w:tr>
<!-- 表头行 end --><#list complexTable.rows as tableRow><#if !tableRow_has_next><!-- 表内容尾行 begin --><w:tr>...<#list tableRow as cell><w:tc>...<!-- 如果表格是外围边框和内边框不一样的话就需要在这里加ifelse代码,第一列调整左边框,最后一列调整右边框;<w:tcBorders><w:top w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="000000"/><w:left w:val="dash-dot-stroked" w:sz="24" wx:bdrwidth="60" w:space="0" w:color="auto"/><w:bottom w:val="dash-dot-stroked" w:sz="24" wx:bdrwidth="60" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="000000"/></w:tcBorders>--><w:t>${cell}</w:t>...</w:tc></#list>...</w:tr><!-- 表内容尾行 end --><#elseif tableRow_has_next && tableRow_index == 0 ><!-- 表内容首行 begin --><w:tr>...</w:tr><!-- 表内容首行 end --><#else ><!-- 表内容中间行 begin --><w:tr>...</w:tr><!-- 表内容中间行 end --></#if></#list></w:tbl>
数据结构定义
{"columns": ["列名1","列名2"],"rows": [["数据1","数据2"],["数据1","数据2"]]
}
总结
上一章我们讲了固定格式表格和图片的生成方法;而在这一章我们讲解了如何生成“复合格式表格”和“可变列表格”,这已经足以让我应对很大一部分应用场景,如果有更复杂的场景,比如说“可变列加复合格式然后部分列需要固定宽度”这样的需求,我们可以将上述解决方法组合使用即可,亲测可用。
代码仓库
https://gitee.com/whatitis/springboot_freemarker_word
测试入口在:
cn.gitee.worddemo.WorddemoApplicationTests#testProc2
根据模板导出word,复合格式表格生成、可变列表格生成相关推荐
- EasyPoi模板导出word(简单文本、内嵌表格、循环图片)
EasyPoi模板导出word(简单文本.内嵌表格.循环图片) 先上效果图 模板在此 依赖导入 *坑:注意依赖版本 4.3.0+才支持多图片循环导出 <!-- word导出 方式:easypoi ...
- poi-tl,根据word模板导出word(表格行循环,表格无表头的情况)
最近项目里要做一个根据客户提供的word模板导出word的功能,方法有很多,比如easyPoi(对word的支持并不是很好),freeMark(太麻烦不想研究),以及poi-tl, 最后研究了半天发现 ...
- freemarker模板导出word循环图片表格详细教程
前言:表哥之前已经过一篇freemarker模板导出带表格word详细教程 freemarker模板导出带表格word详细教程_Java大表哥的博客-CSDN博客,为什么现在又要写一篇呢. 因为我这 ...
- 【Apache POI】Java Web根据模板导出word文件
最近工作中遇到一个需求:根据word模板文档导出word文件. 查阅了一些资料,发现Apache POI可以实现文档读写的功能,于是就研究了一下,总结如下: Apache-POI在线Javadoc:h ...
- POI根据模板导出word文件,以及word转PDF,PDF转图片再插入PDF中(防止PDF被修改)
POI操作word和PDF POI根据模板导出word文件 word转PDF PDF转图片再插入PDF中(防止PDF被修改) POI根据模板导出word文件 一.制作word模版,${xxxx}是一会 ...
- easypoi根据模板导出word
easypoi根据模板导出word 在工作中,模板导出必不或缺,实现模板导出的第三方工具包也有很多.例如:poi.freemaker.hutool的word工具类以及第三方报表工具.这里我简单介绍一下 ...
- java调用word模板文件_Java使用模板导出word文档
Java使用模板导出word文档 需要导入freemark的jar包 使用word模板,在需要填值的地方使用字符串代替,是因为word转换为xml文件时查找不到要填入内容的位置.尽量不要在写字符串的时 ...
- springboot中使用freemarker根据flt模板导出word、pdf文档
1.导包: <!--FreeMarker --> <dependency><groupId>org.springframework.boot</groupId ...
- easypoi按模板导出word不支持列循环迭代问题
使用java按模板导出word,有很多方案,比如freemarker,jacob,openoffice,aspose(非开源收费,需破解版)apache poi等,其中比较常用的是freemarker ...
最新文章
- C语言flood fill 泛洪算法(附完整源码)
- 4-11流量统计项目需求分析
- 程序员抱怨:父母没文化没见识,当初努力学习远离看来是正确的
- 第12章 坚持一百秒(《C和C++游戏趣味编程》教学视频)
- 【实践】通过Composer,安装yii2-advanced
- dpkg: error: dpkg status database is locked by another process
- matlab libjli.so,error while loading shared libraries: libjli.so 问题解决
- 申报表计算机代码是什么,金税盘的维护费在申报表上面有一个要填写减免性质代码怎么填啊 ?那个代码是什么呢?...
- 用python做系统的感悟_《Python机器学习经典实例》学习感悟
- 苹果计算机关机时间不准,mac长时间不关机时间不准确问题
- 垃圾分类的正确姿势?用 OpenCV 人工智能图像识别技术来进行
- 苹果手机隐私分析数据是什么_苹果公司以用户为中心的隐私保护方法能教给我们什么?
- 微信群发消息怎么发?微信群发消息只需要4步?
- content root修改问题
- Intel汇编-传送MMX整数
- 23届应届毕业生秋招分享——秋招经验
- 山沟沟里的技术脱贫:阿里工程师助平武蜂农物联网养蜂...
- matlab绘制图形hold on_MATLAB中hold on和figure的区别?画三维图为什么一定要meshgrid?...
- C#如何读取身份证阅读器
- 3dmax中布尔命令的方法