2015-11-19 53 views
-1

我刚学习如何在MS Word中使用MAILMERGE。我想列出我MERGEFIELD使用的字母序列和我的代码是这样的:MERGEFIELD的MS Word MAILMERGE自动编号

{ 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项目3}是空的,它会产生列表如下:

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

我想是这样的:

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

回答

1

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

{ 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字段来为空白/非空白案例生成结果。问题在于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字段插入的文本末尾放置一个段落标记。

两种方法都应该延长到尽可能多的项目,你需要,但要知道,由*字母生产的“字母序列”是不是

一个 b 。 。 z aa ab 。 。 az ba bb 。 。 BZ

正如您所料,但

一个 b 。 。 z aa bb 。 。 zz aaa bbb 。 。 zzz

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

但是,如果您想更容易地扩展项目数,如果这些字段继续被编号为item6,item7等,您可以修改字段编码,以便您所需要做的就是粘贴到您需要的份数。对于使用序列编码,可以使用

{ 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 }" } 
" } 
+0

谢谢你的忠告Bibadia。有没有办法为许多列表数据生成字母顺序校正?对于我上面的例子,只有5个项目。如果我有超过20个项目?我是否应该手动创建IF条件以创建正确的编号,或者有办法自动生成正确的字母顺序?我一直在使用谷歌搜索,没有发现任何与我的案件有关的文章。谢谢 –

+0

它的作品!我使用你的第一个代码: {MERGEFIELD item1 \ b“{SEQ {IF {MERGEFIELD item1} =”“nolist list} \ * alphabetic}。”} 我的错误是我没有使用预览结果来查看它。谢谢Bibadia。这是我第一次使用域代码工作。 –