1、功能需求
这是实现的效果,主要的问题是第一列相同的数据合并!!
2、实现思路
合并行需要的属性值:<w:vMerge w:val=‘restart’/>和<w:vMerge/>
3、数据封装
public List<Map<String, Object>> queryChecklistUpload(Map<String, Object> params) {
List<Map<String, Object>> list = checklistMapper.queryChecklistUpload(params);
String start = "<w:vMerge w:val='restart'/>";
String end = "<w:vMerge/>";
String tmp = (String) list.get(0).get("id");
for (int i = 0; i < list.size(); i++) {
if (i == 0) {
list.get(i).put("start", start);
continue;
}else if(!list.get(i).get("id").equals(tmp)){
list.get(i).put("start", start);
list.get(i-1).put("end", end);
}else if(list.get(i).get("id").equals(tmp)){
list.get(i).put("end", end);
}
if(i == list.size()-1){
list.get(i).put("end", end);
continue;
}
tmp = (String) list.get(i).get("id");
}
return list;
}
4、freemaker获取数据并遍历
**<#list checklist as checks>
<w:tr w:rsidR="007D2DF4" w:rsidRPr="00222630" w:rsidTr="00955DEE">
<w:tc><w:tcPr><w:tcW w:w="710" w:type="dxa"/>
${checks.start!''}
<w:tcBorders><w:top w:val="single"/><w:left w:val="single"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders>
${checks.end!''}
<w:shd w:val="clear" w:color="auto" w:fill="auto"/></w:tcPr><w:p w:rsidR="008028F4" w:rsidRPr="00955DEE" w:rsidRDefault="00573EBE" w:rsidP="00955DEE"><w:pPr><w:widowControl/><w:spacing w:line="240" w:lineRule="auto"/><w:ind w:leftChars="100" w:left="210" w:firstLineChars="0" w:firstLine="0"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:kern w:val="0"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:kern w:val="0"/></w:rPr><w:t>${checks.testItem}</w:t></w:r></w:p>
</w:tc>**
<w:tc><w:tcPr><w:tcW w:w="1417" w:type="dxa"/><w:tcBorders><w:top w:val="single"/><w:left w:val="single"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/></w:tcPr><w:p w:rsidR="008028F4" w:rsidRPr="007D2DF4" w:rsidRDefault="00B22960" w:rsidP="00955DEE"><w:pPr><w:widowControl/><w:spacing w:line="240" w:lineRule="auto"/><w:ind w:leftChars="100" w:left="210" w:firstLineChars="0" w:firstLine="0"/><w:jc w:val="left"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:kern w:val="0"/></w:rPr></w:pPr><w:r w:rsidRPr="007D2DF4"><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:kern w:val="0"/></w:rPr><w:t>${checks.checkPoint}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1133" w:type="dxa"/><w:tcBorders><w:top w:val="single"/><w:left w:val="single"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/></w:tcPr><w:p w:rsidR="008028F4" w:rsidRPr="007D2DF4" w:rsidRDefault="007D2DF4" w:rsidP="00955DEE"><w:pPr><w:widowControl/><w:spacing w:line="240" w:lineRule="auto"/><w:ind w:leftChars="100" w:left="210" w:firstLineChars="0" w:firstLine="0"/><w:jc w:val="left"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:kern w:val="0"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:kern w:val="0"/></w:rPr><w:t>${checks.preTestResult}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1133" w:type="dxa"/><w:tcBorders><w:top w:val="single"/><w:left w:val="single"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/></w:tcPr><w:p w:rsidR="008028F4" w:rsidRPr="007D2DF4" w:rsidRDefault="007D2DF4" w:rsidP="00955DEE"><w:pPr><w:widowControl/><w:spacing w:line="240" w:lineRule="auto"/><w:ind w:leftChars="100" w:left="210" w:firstLineChars="0" w:firstLine="0"/><w:jc w:val="left"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:kern w:val="0"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:kern w:val="0"/></w:rPr><w:t>${checks.chargeStaff}</w:t></w:r></w:p></w:tc>
</w:tr></#list>
其中:
获取数据并遍历:<#list checklist as checks>
防止数据为null程序报错: ${checks.end!’’}
切记:
1、如果合并三行的相同数据,不是在第一行的位置添加<w:vMerge w:val=‘restart’/> 在第三行的位置添加<w:vMerge/>,本人踩坑体会。
要在第一行添加<w:vMerge w:val=‘restart’/>,要合并的第二行及第三行添加<w:vMerge/> ,否则合并失败!!!
2、合并标签放置的位置是有限制的:
<w:tc>
<w:tcPr><w:tcW w:w="710" w:type="dxa"/>
${checks.start!''}
<w:tcBorders><w:top w:val="single"/><w:left w:val="single"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right
w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders>${checks.end!''}<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<w:p w:rsidR="008028F4" w:rsidRPr="00955DEE" w:rsidRDefault="00573EBE" w:rsidP="00955DEE"><w:pPr><w:widowControl/><w:spacing w:line="240" w:lineRule="auto"/><w:ind w:leftChars="100" w:left="210" w:firstLineChars="0" w:firstLine="0"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:kern w:val="0"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:kern w:val="0"/></w:rPr><w:t>${checks.testItem}</w:t></w:r></w:p>
</w:tc>
要在<w:tcPr>标签内,起始标签可放在同一位置!
另外 ,列的合并请参考文章: https://blog.csdn.net/wp4862/article/details/82149451