MS Word MAILMERGE为MERGEFIELD自动编号

时间:2015-11-19 07:40:18

标签: ms-word mailmerge mergefield

我只是学习如何在MS Word中使用MAILMERGE。我想列出我的MERGEFIELD使用字母序列,我的代码是这样的:

{ SEQ list \* alphabetic }. { MERGEFIELD item1 }
{ SEQ list \* alphabetic }. { MERGEFIELD item2 }
{ SEQ list \* alphabetic }. { MERGEFIELD item3 }
{ SEQ list \* alphabetic }. { MERGEFIELD item4 }
{ SEQ list \* alphabetic }. { MERGEFIELD item5 }

以上代码的结果是:

a.  duck
b.  dog
c.  bird
d.  cat
e.  pig

当一个或多个MERGEFIELD值为空时,我遇到问题。例如,如果 {MERGEFIELD item3}为空,它将生成如下列表:

a.  duck
b.  dog
c.  
d.  cat
e.  pig

我想要的是这样的:

a.  duck
b.  dog
c.  car
d.  pig

1 个答案:

答案 0 :(得分:1)

如果它是 Windows Word 2003或更高版本(或者可能是Word XP,我会忘记),最简单的方法可能是使用以下嵌套字段代码并依赖Word来抑制#34;抑制空行" (这是默认设置)

{ MERGEFIELD item1 \b "{ SEQ { IF { MERGEFIELD item1 } = "" nolist list } \*alphabetic }. " }
{ MERGEFIELD item2 \b "{ SEQ { IF { MERGEFIELD item2 } = "" nolist list } \*alphabetic }. " }
{ MERGEFIELD item3 \b "{ SEQ { IF { MERGEFIELD item3 } = "" nolist list } \*alphabetic }. " }
{ MERGEFIELD item4 \b "{ SEQ { IF { MERGEFIELD item4 } = "" nolist list } \*alphabetic }. " }
{ MERGEFIELD item5 \b "{ SEQ { IF { MERGEFIELD item5 } = "" nolist list } \*alphabetic }. " }

(所有{}必须是您可以使用ctrl-F9在Windows Word中插入的特殊字段代码括号对。此外,当您预览时,空行仍然会出现,并带有&#34 ; ..."在开头,但是当你实际执行合并时它们应该消失。)

如果您使用的是Windows Word XP / 2000或更早版本或任何版本的Mac Word,则不支持\ b标志。因此,您必须使用IF字段生成空白/非空白案例的结果。问题是IF字段内的SE字段通常会被评估是否输出结果文本,因此最终会出现序列中的间隙。即使试图让Word使用两个不同的序列("列表"和" nolist"如上所述)也无法正常工作。但是,您可以尝试另一种方法(它应该适用于所有版本的Word):

{ IF { MERGEFIELD item1 } <> "" "{ SET list { =list+1 } }{ list \*alphabetic }. { MERGEFIELD item1 }
" }{ IF { MERGEFIELD item2 } <> "" "{ SET list { =list+1 } }{ list \*alphabetic }. { MERGEFIELD item2 }
" }{ IF { MERGEFIELD item3 } <> "" "{ SET list { =list+1 } }{ list \*alphabetic }. { MERGEFIELD item3 }
" }{ IF { MERGEFIELD item4 } <> "" "{ SET list { =list+1 } }{ list \*alphabetic }. { MERGEFIELD item4 }
" }{ IF { MERGEFIELD item5 } <> "" "{ SET list { =list+1 } }{ list \*alphabetic }. { MERGEFIELD item5 }
" }

请注意,在这种情况下,我们不能依赖Word来抑制由空IF字段结果产生的空白行,因此我们在MERGEFIELD结果不是的时候在IF字段插入的文本末尾添加一个段落标记。空白。

任何一种方法都应该扩展到你需要的任意数量的项目,但要注意&#34;字母序列&#34;由* alphabetic生成的不是

一 b 。 。 ž AA AB 。 。 AZ BA BB 。 。 BZ

正如您所料,但

一 b 。 。 ž AA BB 。 。 Z Z AAA BBB 。 。 ZZZ

如果你真的想要第一个更熟悉的序列,你需要做更多。 (我以前做过这个,但可能会重新研究它。)

但是,如果您想更容易扩展项目数,如果字段继续编号为item6,item7等,您可以修改字段编码,这样您只需要粘贴数字你需要的副本。对于使用SEQ的编码,您可以使用

{ MERGEFIELD "item{ SEQ i }" \b "{ SEQ { IF MERGEFIELD "item{ SEQ i \c }" } = "" nolist list } \*alphabetic }. " }

对于使用SET的编码,您可以使用

{ IF { MERGEFIELD "item{ SEQ i}" } <> "" "{ SET list { =list+1 } }{ list \*alphabetic }. { MERGEFIELD "item{ SEQ i \c }" }
" }