NVeloDocx是基于NVelocity和OpenXml的Word模版引擎,所以遵循NVelocity的语法,但是要求上更为严格。前面的《子表遍历及取数》中我们已经知道了怎么取子表数据并遍历输出。这里我们详细讲解一下子表表格输出的两种类型。
第一种情况:每条子表记录为一个表格输出:
那么这种情况下#foreach...#end命令就需要在表格前后,如下图#foreach,表格,#end三者分属于不同的段落:
用到的脚本如下:
脚本说明:其中${data.GetChild("CustomerContact")}表示取当前主表上的子表CUstomerContact(E6开发平台Word模版设计页面上勾选的子表ID)后赋值给$child变量,那么后面就可以#foreach循环子表的每一行了。
#set($child=${data.GetChild("CustomerContact")}) #foreach($item in ${child}) ..... #end ## 而取子表的每个字段如下,这和取主表字段是类似的,区别在于: ## 取主表字段用${data.GetValue("这里填主表上的字段名")} ## 取子表字段用${child.GetValue($item,"这里填子表上的字段名")} 这里GetValue方法多了一个$item参数,表示子表的一行; ${child.GetValue($item,"__Name__")}
第二种情况:表格有表头,每条子表记录在表格中占一行。
要循环生成多行,则需要前后2行合并行用于写循环命令。
那么此时我们需要在循环行前后增加一行,且整行合并成一个单元格,前后分别输入#foreach和#end,如下图。中间的数据行使用取数标签即可。
#foreach前可以有其他的行,如表头,循环不会影响前面的行。
#end后也还可以有其他的行,循环不会影响#end后面的行。