2015-11-19 103 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。這是我第一次使用域代碼工作。 –