MERGEFIELD 的 MS Word MAILMERGE 自动编号

MS Word MAILMERGE autonumbering for 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

如果是 Windows Word 2003 或更高版本(或者可能是 Word XP,我忘记了),最简单的方法可能是使用以下嵌套字段代码和依赖 Word "suppress blank lines"(这是它的默认设置)

{ 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 中插入它们。此外,当您预览时,空行仍会出现, 以“..”开头,但当您实际执行合并时它们应该会消失。)

如果您使用的是 Windows Word XP/2000 或更早版本,或者 Mac Word 的任何版本,则不支持 \b 标志。因此,您必须使用 IF 字段来生成 blank/non-blank 个案例的结果。问题是 IF 字段内的 SE 字段通常会被评估,无论结果文本是否输出,因此您最终会在序列中出现间隙。即使试图让 Word 使用两个不同的序列("list" 和 "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 字段插入的文本末尾放置一个段落标记不是空白。

这两种方法都应根据需要扩展到尽可能多的项目,但请注意 *alphabetic 生成的 "letter sequence" 不是

一个 b . . z 一个 ab . . 啊 吧 bb . . bz

如您所料,但是

一个 b . . z 一个 bb . . Z Z 啊啊 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 }" }
" }