如何通过遍历同一变量在.docx文档首尾生成两个表格?
问题解决:在DOCX中重复生成同一数据源的表格
问题现象
使用TinyButStrong模板引擎时,尝试在文档开头和末尾各生成一个基于同一数据源var1的表格,但最终仅能生成第一个表格,第二个表格无法正常渲染数据,即使放在不同段落也无效。模板代码如下:
Some document start.... [onshow;block=begin;when [var1.total!=0] | Name | Barcode | | ------------------------- | ---------------- | | [var1.name;block=tbs:row] | [var1.barcode] | [onshow;block=end] Some document middle.... [onshow;block=begin;when [var1.total!=0] | Name | Barcode | | ------------------------- | ---------------- | | [var1.name;block=tbs:row] | [var1.barcode] | [onshow;block=end] Some end of document....
原因分析
TinyButStrong默认对数据源的遍历是一次性的,第一次渲染表格时已经将var1的数据源游标移到了末尾,第二次遍历同一数据源时没有重置游标,所以无法获取到数据,导致第二个表格无法生成行内容。
解决方法
在第二个表格的行块标签中添加pos=1参数,强制重置数据源的游标到起始位置,这样就能重新遍历整个数据源生成表格。修改后的模板代码如下:
Some document start.... [onshow;block=begin;when [var1.total!=0] | Name | Barcode | | ------------------------- | ---------------- | | [var1.name;block=tbs:row] | [var1.barcode] | [onshow;block=end] Some document middle.... [onshow;block=begin;when [var1.total!=0] | Name | Barcode | | ------------------------- | ---------------- | | [var1.name;block=tbs:row;pos=1] | [var1.barcode;pos=1] | [onshow;block=end] Some end of document....
说明:pos=1表示将数据源的位置指针重置到第一条记录,确保第二次遍历能从头开始读取数据。若使用的是TBS旧版本,可尝试替换为pos=0测试。
内容的提问来源于stack exchange,提问作者Felipe
相关产品推荐
相关产品推荐

