邮件合并实现多行数据合并详细过程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通邮件合并实现多行数据合并到一个模板

应朋友之请,要帮她实现一个邮件合并的应用场景。本来,邮件合并是个挺简单的事。但是她的要求却远远超出我对邮件合并的认知。要求是这样的:相同系列的不同产品要放在同一张质量保证书上。每种系列下不超过3个规格。不同系列要分开做质量保证书。WORD的邮件合并对于处理连续单行的数据比较容易,但是对于这种要按某个字段分开处理不太容易。这就是所谓的多行数据合并到一个模板中的问题。

网上搜索了很多教程,看的迷迷糊糊,没有一个真的看懂了。经过一个晚上的反复摸索。总算有了眉目,现将过程记录下来,以防遗忘。

EXCEL文件清单内容如下图。最右列的计数项是添加的辅助列,公式为=if(l2=l3,1,0),也就是判断本行的编号和下一行的编号是否一致。这个非常重要,因为后面的拆分要依靠此列的数据指引。

最终的效果如下图

最终实现域代码如图

下面是具体的操作步骤:

注意:本文中所要求输入的内容中,除了中文外,其他内容均要求在英文半角状态下输入。

先新建一空白WORD文档,然后插入一个多列(根据需求)3行(因为最多只有3个型号,当然,实际使用过程中应该是增加表头行的)的空白表格。然后在“邮件”选项卡中点击“选择收件人”,然后选择“使用现有列表”,找到你保存的EXCEL源文件。打开后,进入正常的邮件合并界面。这一步不多说,因为就是普通的邮件合并步骤,网上教程也很多。

在域代码图所示的第一个空白单元格中,按照常规的邮件合并方法,插入编号字段和规格字段。到这一步为止,所有步骤和普通邮件合并没有任何区别。区别在接下来的步骤中。

在第二行第一个空白单元格中,先按下ALT+F9,然后按CTRL+F9,出现一对大括号{},但这个大括号一定是要通过组合键出来,手工输入是无效的。在大括号中输入set a "" ,a 可以自己指定其他的名称。在set a ""这三者之间都要有空格。然后将光标定位到“”中间,在菜单中选择“插入合并域”,在列表中选择“计数”字段。这样就会得到{ set

a "{MERGEFIELD 计数}"}这样的代码。

接着,在邮件选项卡下的‘规则’下拉列表中选择“下一条记录”,如下图

在接下来的对话框中,域名栏中选择“计数”,比较条件选择“等于”,比较对象框中输入1.确定。此时在前面的代码后面应该出现了{NEXTIF {MERGEFIELD 计数} = 1 }这样的代码。

再此代码后面光标处,再次按CTRL+F9,出现对大括号,在大括号中输入if a <> 0 ,注意<>这两个符号中间没有空格,其他单词之间均有空格。在0后面输入一个空格符号,点击“邮件”选项卡下的插入合并域,选择“编号”字段插入,然后再输入空格,输入一个连续的双引号""。得到的代码,如上图中红色圈住的下面的部分。

在移到第二行第二列单元格中,按上面一个步骤输入,不过,要将其中的”编号”更换为“规格”字段。这样,第二行就继续完成。将第二行内容复制到第三行中,就完成了编辑工作。最终效果见上文的图。

此时按ALT+F9,退出域代码编辑状态,如下图。

点击预览结果即可看到最终的结果。然后可以完成合并。

下面来说说这些代码的用处。做到知其所以然,虽然这只是我自己摸索理解的,不一定对,但至少它实现了我的目标,姑且认为理解的是对的。等以的事再慢慢查说明,再做研究。

{ set a "{MERGEFIELD 计数}"} 这第一段代码是指将前一行中的计数对应的值赋予a变量。开始我认为这段代码是将当前行对应的记录的计数项的值赋予变量的,但后来仔细想想了,还是应该读取的上一行计数的对应值。因为这个代码只有从第二行才开始起作用,所以,应该读取的是前一行数据对应的计数的值。

{NEXTIF {MERGEFIELD 计数} = 1 } 这段代码其实是WORD自己产生的,并不需要手工输入。但是这个步骤很关键,它判断上一行的计数值是不是1,如果是1,那么说明这一行是有数据要填充的,所以要读取上一行记录的下一条的内容来填充到本行。

{if a <> 0 {MERGEFIELD 质量证明书编码} ""} 如果记录条数达不到3条的话,又不用这段代码限制的话,上面一条代码造成的结果就是,它会将剩下的行内填入上一条记录的内容。为了避免这种情况,本段代码就用来判断a变量是否为0,如果为0,就不显示了。

验证一下。假如一个编号对应了2个记录。那么计数项中,第1个记录和第2个记录的对应值应该是1和0.在邮件合并中,第一行内会填入第一个记录内容。第二行时,第一段代码先取得上一行的计数值,第1个记录对应的计数值是1,并将1赋予a变量。第二段代码判断记计数值=1,所以允许读取第2个记录内容。第三段代码则根据a变量的值是否为0,显示a此时应该是1,所以显示内容。到了第三行,由于第2个记录对应的计数值为0,第三段代码作出了a=0的判断,显示为空。而三行之后,又进入了另外一个表格的循环。这样就实现了目标要求。

相关文档
最新文档