联系
我们

工作日 9:00-18:00

13632615190

子表输出的两种方式

NVeloDocx是基于NVelocity和OpenXml的Word模版引擎,所以遵循NVelocity的语法,但是要求上更为严格。前面的《子表遍历及取数》中我们已经知道了怎么取子表数据并遍历输出。这里我们详细讲解一下子表表格输出的两种类型。


第一种情况:每条子表记录为一个表格输出:

image.png

那么这种情况下#foreach...#end命令就需要在表格前后,如下图#foreach,表格,#end三者分属于不同的段落:

image.png

用到的脚本如下

脚本说明:其中${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__")}



第二种情况表格有表头,每条子表记录在表格中占一行。

image.png

要循环生成多行,则需要前后2行合并行用于写循环命令

那么此时我们需要在循环行前后增加一行,且整行合并成一个单元格,前后分别输入#foreach和#end,如下图。中间的数据行使用取数标签即可。

image.png

#foreach前可以有其他的行,如表头,循环不会影响前面的行。

#end后也还可以有其他的行,循环不会影响#end后面的行。