本文介绍使用freeMark生成包含表格合并单元的word如何制作模板, 合并单元格主要使用

<w:vmerge w:val='restart'/>和<w:vmerge/>实现。

生成word效果图:

开始

1、编辑word文档,删除重复部分,只保留关键元素

2、把word另存为xml文件

3、简化模板内容

格式化XML(在线工具https://www.sojson.com/xml.html)

删除多余标签, 简化<w:wordDocument>标签为:

<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"xml:space="preserve">

删除 <o:DocumentProperties>、<w:fonts>、<w:styles>、<w:shapeDefaults>、<w:docPr>

删除 wsp:相关属性(替换为空)

把段落、文本、单元格样式抽离成 freemark macro

 <#macro pPrSetting><w:pPr><w:pPr><w:widowControl/><w:jc w:val="center"/><w:textAlignment w:val="center"/></w:pPr><#nested></w:pPr></#macro><#macro rPrSetting font="宋体" size="18" bold="false"><w:rPr><w:rFonts w:ascii="${font}" w:fareast="${font}" w:cs="${font}" w:h-ansi="${font}" w:hint="fareast"/><#if bold=="true"><w:b/></#if><wx:font wx:val="${font}"/><#nested><w:sz w:val="${size}"/><w:sz-cs w:val="${size}"/></w:rPr></#macro><#macro tcPrSetting vmerge="none"><w:tcPr><#if vmerge=="restart"><w:vmerge w:val="restart"/></#if><#if vmerge=="end"><w:vmerge/></#if><#nested><w:vAlign w:val="center"/></w:tcPr></#macro>

4、循环行,处理合并单元格,填充数据

注:需合并的单元格第一行标注 "<w:vmerge w:val="restart" />",从第二行开始,所有要合并的单元标注"<w:vmerge />"

 <#assign count = 0><#assign vmerge = "none"><#setting number_format=",##0.0"><#assign total = 0><w:body><wx:sect><w:p><w:pPr><w:spacing w:line="400" w:line-rule="exact"/><w:jc w:val="left"/></w:pPr><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>附件4:</w:t></w:r></w:p><w:p><w:pPr><w:spacing w:line="580" w:line-rule="exact"/><w:jc w:val="center"/></w:pPr><w:r><@rPrSetting font="宋体" size="32" bold="true"></@rPrSetting><w:t>表1:${name}</w:t></w:r></w:p><w:p><w:pPr><w:spacing w:line="360" w:line-rule="exact"/><w:ind w:first-line-chars="550" w:first-line="1320"/></w:pPr><w:r><@rPrSetting font="方正小标宋简体" size="24"></@rPrSetting><w:t></w:t></w:r><w:r><@rPrSetting font="方正小标宋简体" size="24"></@rPrSetting><w:t></w:t></w:r><w:r><@rPrSetting font="方正小标宋简体" size="24"></@rPrSetting><w:t>金额单位:亿元</w:t></w:r></w:p><w:tbl><w:tblPr><w:tblW w:w="0" w:type="auto"/><w:tblInd w:w="0" w:type="dxa"/><w:tblBorders><w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/></w:tblBorders><w:tblLayout w:type="Fixed"/><w:tblCellMar><w:top w:w="15" w:type="dxa"/><w:left w:w="15" w:type="dxa"/><w:bottom w:w="15" w:type="dxa"/><w:right w:w="15" w:type="dxa"/></w:tblCellMar></w:tblPr><w:tblGrid><w:gridCol w:w="544"/><w:gridCol w:w="2287"/><w:gridCol w:w="1065"/><w:gridCol w:w="1136"/><w:gridCol w:w="1136"/><w:gridCol w:w="1136"/><w:gridCol w:w="1122"/></w:tblGrid><w:tr><w:trPr><w:trHeight w:val="271"/></w:trPr><w:tc><@tcPrSetting><w:shd w:val="clear" w:color="auto" w:fill="C0C0C0"/></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>产业</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting><w:shd w:val="clear" w:color="auto" w:fill="C0C0C0"/></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>所属行业</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting><w:shd w:val="clear" w:color="auto" w:fill="C0C0C0"/></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>本年累计</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting><w:shd w:val="clear" w:color="auto" w:fill="C0C0C0"/></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>占比(%)</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting><w:shd w:val="clear" w:color="auto" w:fill="C0C0C0"/></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>同比增减额</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting><w:shd w:val="clear" w:color="auto" w:fill="C0C0C0"/></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>同比增速(%)</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting><w:shd w:val="clear" w:color="auto" w:fill="C0C0C0"/></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>环比增速(%)</w:t></w:r></w:p></w:tc></w:tr><#list list as item><#if item.type==0 && item.category==0><#list item.contents as content><#assign total = content.value><w:tr><w:trPr><w:trHeight w:val="301"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2831" w:type="dxa"/><w:gridSpan w:val="2"/><w:vAlign w:val="center"/></w:tcPr><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>合计</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>${content.value!}</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>100.0</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>${content.value - content.lastValue}</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>${content.yoy!}</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="true"></@rPrSetting><w:t>${content.mom!}</w:t></w:r></w:p></w:tc></w:tr></#list></#if></#list><#list list as item><#if item?has_next><#if count==0 && item.type==list[item?index+1].type><#assign vmerge = "restart"><#assign count = count+1><#elseif count gt 0><#assign vmerge = "end"><#if item.type!=list[item?index+1].type><#assign count = 0></#if></#if><#else><#if count gt 0><#assign vmerge = "end"></#if></#if><#if item.type gte 6 && item.type lte 8><#list item.contents as content><w:tr><w:trPr/><w:tc><@tcPrSetting vmerge="${vmerge}"></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="${(item.category==0)? then('true', 'false')}"></@rPrSetting><w:t>${item.typeName!}</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="22" bold="${(item.category==0)? then('true', 'false')}"></@rPrSetting><w:t>${item.name!}</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="${(item.category==0)? then('true', 'false')}"></@rPrSetting><w:t>${content.value!}</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="${(item.category==0)? then('true', 'false')}"></@rPrSetting><w:t>${content.value*100/total!}</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="${(item.category==0)? then('true', 'false')}"></@rPrSetting><w:t>${content.value - content.lastValue}</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="${(item.category==0)? then('true', 'false')}"></@rPrSetting><w:t>${content.yoy!}</w:t></w:r></w:p></w:tc><w:tc><@tcPrSetting></@tcPrSetting><w:p><@pPrSetting></@pPrSetting><w:r><@rPrSetting font="宋体" size="21" bold="${(item.category==0)? then('true', 'false')}"></@rPrSetting><w:t>${content.mom!}</w:t></w:r></w:p></w:tc></w:tr></#list></#if></#list></w:tbl><w:p/><w:p/><w:p/><w:p/><w:p/><w:p/><w:p/><w:sectPr><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992"w:gutter="0"/><w:cols w:space="720"/><w:docGrid w:type="lines" w:line-pitch="312"/></w:sectPr></wx:sect></w:body>

FreeMarker生成word-定义模板步骤(带表格且含合并单元格)相关推荐

  1. js动态生成表格【含合并单元格的表格】

    最近遇到需求,动态生成表格,类似Excel,支持合并单元格的表格,代码分享给大家~ 一.网上找到的简单生成表格的例子: 以下是生成规则表格m行*n列类似,可以直接打开HTML查看结果. <!DO ...

  2. python pptx 关于在ppt里插入表格,调整合并单元格的问题

    python pptx 关于在ppt里插入表格,调整合并单元格的问题 需求 找到合并了的单元格 思路 判断是否是合并单元格 合并位置的记录 合并 代码 需求 首先我这是为了从word里面将内容导到pp ...

  3. PyQT5 (四十六) 在 QTableWidget 表格中设置合并单元格 的案例

    在 QTableWidget 表格中设置合并单元格 的案例 setSpan(row, col, 要合并的行数, 要合并的列数) import sysfrom PyQt5 import QtPrintS ...

  4. 动态处理表格多行合并单元格、同时解决hover错乱问题 - Vue Element Table

    简介: el-table单元格合并,处理hover错乱问题,自定义底部合计栏. 如图所示: 源码(复制另存txt,修改.html直接运行) <!DOCTYPE html> <html ...

  5. Freemarker模板引擎学习,生成html里的动态表格,可合并单元格

    需求:现有html模板,需动态填充数据,并且包含表格,表格大小不固定,根据数据多少确定表格大小. 解析:两种方案: 1.java代码实现:将模板文件读出为StringBuffer,找到特定位置,循环生 ...

  6. java poi生成word 插入表格,图片,自动合并单元格,并且可以在已存在的word上追加

    poi版本选3.10以上的 要不然插入图片 word会打不开 <dependency><groupId>org.apache.poi</groupId><ar ...

  7. Speedoffice(word)插入表格,如何合并单元格?

    在用Word制作表格的时候,有时插入的表格需要合并单元格,那怎么合并了?以最常用的speedoffice为例和大家分享一下. 1,首先运行软件,新建一份word插入表格作为演示,接着选中需要合并的单元 ...

  8. Python读取docx表格中的合并单元格信息

    目录 一.问题背景 1.1 常规写法 1.2 奇怪问题 二.发现线索 2.1 前途光明 2.2 道路曲折 三.顺藤摸瓜 3.1 找源代码 3.1 分析原因 3.3 取得所需 四.破解办法 4.1 找到 ...

  9. 用Xlsx xlsx-style 导出excel表格,附带合并单元格,文字居中,文字颜色字体大小等样式 (复制即可实现)

    提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一.用Xlsx xlsx-style 导出excel表格 二.使用步骤 1.安装插件 2.引入 总结 前 ...

最新文章

  1. CSS之布局(盒子模型--外边距)
  2. 梯度消失、梯度爆炸、过拟合问题之神经网络应对方案:数据预处理、批量归一化、非饱和激活函数、梯度缩放和梯度裁剪、权重初始化、提前终止、集成学习、l1l2、Dropout
  3. 特来电CMDB应用实践
  4. 如何理解 JAVA 中的 volatile 关键字
  5. 数据结构——顺序表(二)
  6. Web前端开发笔记——第二章 HTML语言 第一节 标签、元素、属性
  7. facenet训练自己的数据_基于SSD与Facenet的人脸识别
  8. P5135-painting【组合数学】
  9. java10个基础错误_我们处理了10亿个Java记录的错误-这是导致97%的错误的原因
  10. 毕业两年的我--奋斗中的程序员
  11. 微信没有回车键怎么换行_在东平相亲网加了心仪对方的微信,但是没有话题怎么办?...
  12. Qt——P20 模态和非模态对话框创建
  13. BDF开发框架的搭建(摘)
  14. 中国城市统计年鉴1985-2021中国城市年鉴面板数据(完美Excel版)
  15. 【对讲机的那点事】公网对讲机的物联卡你了解吗?
  16. 在angular中实现图片/视频的预览
  17. 坚果X3怎么样好不好值得买吗,和当贝X3哪款好这篇告诉你
  18. python中的list 冒号用法
  19. [博学谷学习记录]超强总结,用心分享|人工智能机械学习基础知识线性回归总结分享
  20. 高新企业申请补贴需要什么条件

热门文章

  1. 记录解决RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 27 but got size
  2. 解决“Microsoft Office Word 遇到问题需要关闭。”
  3. 20以内分数化小数表_初等数学33-百分数
  4. 北航计算机在职研究生定向,北航软件学院首招人工智能方向研究生
  5. 在线视频付费点播网站怎么搭建?
  6. 神秘!迅雷将推共享计算企业级新品
  7. CBD应成为所在城市群内引外联的智慧平台
  8. discuz member.php,Discuz启用Memberchach完美教程
  9. was loaded over HTTPS, but requested an insecure错误解决
  10. Sitemap工具解析