【问题标题】:How to document Microsoft Word mail merge templates? [closed]如何记录 Microsoft Word 邮件合并模板? [关闭]
【发布时间】:2016-06-04 20:41:12
【问题描述】:

我正在使用 Word 2010 中的目录邮件合并功能,使用 Excel 2010 电子表格作为数据源来创建格式化文档(需求)。

一切正常,但我有一堆紧凑的大括号、格式化的单个字符和字段,几乎没有空格(因为这会改变我的输出)。我插入了带有CTRL-F9 的字段,Word 将它们视为自己的对象而不是单个字符。

复杂性来自于有很多条件字段,其中一些是嵌套的,并且没有大多数代码用于查看嵌套结构的典型提示(换行符、缩进等)

是否有一种直接的方法可以从文档中记录邮件合并模板代码?或者,如果我想利用空格和其他可读性提示,我是否需要维护一个单独的文本文件?

【问题讨论】:

    标签: documentation mailmerge word-2010


    【解决方案1】:

    您可以通过以下方式帮助处理域代码文档。但是有很多陷阱,这使答案复杂化。我试图在下面介绍它们。

    1. 在域代码中使用格式字符,例如段落标记 大括号改善布局
    2. 使用带有空结果的域代码类型,例如“SET”来插入 文档
    3. 在域代码中使用隐藏文本插入文档
    4. 删除非绝对引号 (") 字符
      必要的

    (1)的一个例子:

    如果你有类似的东西:

    { IF { MERGEFIELD A } = { bookmarka } "{ MERGEFIELD B }" "{ IF { MERGEFIELD C } = { bookmarkb } "result2" "result3" }" }
    

    然后你可以这样布局而不改变 IF 字段的结果:

    { IF { MERGEFIELD A } = { bookmarka } 
      "{ MERGEFIELD B }" 
      "{ IF { MERGEFIELD C } = { bookmarkb } 
        "result2" 
        "result3" }" }
    

    { bookmarka } 之后单击并按 Enter 键输入一个普通的 Word 段落标记,然后在引号字符之前插入一些空格。

    不同的人可能会选择不同的缩进模式和处理关闭“}”的方式。该领域没有标准或广泛使用的传统,例如 C 代码。

    有一个缺点。每次在域代码和域结果视图之间切换时,Word 可能会在一个长文档中重新分页,并且您可能会在代码中“失去自己的位置”。

    (2) 的一个示例是,您可以在代码中的许多地方(但不是全部)插入一个 { SET } 字段,并在“SET variablename”部分之后放置几乎所有文本。或者您可以定义一个名为“REMARK”的书签(“COMMENT”似乎很容易与内置字段代码 COMMENTS 混淆)

    例如

    { SET REMARK I wouldn't use "COMMENT" }
    

    或者放

    { SET REMARK "" } 
    

    在代码的开头然后使用

    { REMARK I wouldn't use "COMMENT" }
    
    { REMARK because it might be confused with the "COMMENTS" field } 
    

    请记住,您不能将域代码绝对放在域代码“块”中的任何位置,因为在某些地方 Word 对域编码的解释会发生变化。例如

    { IF 1 = 0 { MERGEFIELD X } { MERGEFIELD Y } }
    

    应该总是插入{ MERGEFIELD Y }的值

    但是

    { IF 1 = 1 { MERGEFIELD X }{ REMARK insert X } { MERGEFIELD Y } }
    

    将插入{ REMARK insert X }的结果

    你可以使用

    { IF 1 = 1 "{ MERGEFIELD X }{ REMARK insert X }" { MERGEFIELD Y } }
    

    或者在这种情况下,

    { IF 1 = 1 { MERGEFIELD X { REMARK insert X } } { MERGEFIELD Y } }
    

    关于第(3)点 Word 一般会忽略域代码中的隐藏文本,因此您可以使用隐藏文本插入文档。但同样,你必须小心你把它放在哪里。例如,这种方法对于通常标记为隐藏的字段类型(例如 TC 和 XE)是无用的。就个人而言,我不认为插入文档然后隐藏它的想法是理想的——除此之外,它很容易在不知道它存在的情况下删除。但可以做到。

    关于第 4 点,Microsoft Word 插入某些字段类型的方式以及“字段代码语言”的文档(例如)意味着存在用引号字符包围某些内容的传统。示例通常在 IF 字段中显示这一点...

    { IF comparand-1 operator comparand-2 "result if true" "result if false" }
    

    在这种特殊情况下,您需要引号,但如果“结果为真”或“结果为假”是单个单词(就 Word 而言)或单个域代码的结果, 则可以省略引号,例如

    { IF comparand-1 operator comparand-2 true false }
    

    { IF comparand-1 operator comparand-2 { REF bookmarka } { REF bookmarkb } }
    

    我个人更喜欢使用引号,因为这是很多用户都熟悉的模式,而且如果你修改了域代码,你不必考虑是否需要重新插入引号之类的。但这只是我的偏好。特别是在嵌套 IF 字段的情况下,您通常会将单独的字段代码作为结果,而引号可能并不能真正提高清晰度。

    您还必须记住,在某些情况下,您必须用引号将字段括起来。例如,如果要确保将两个值作为字符串进行比较,至少应该引用它们。

    例如,假设您有一个可以包含任何文本字符串的合并字段 X,并且您希望将该字符串与“3”进行比较。如果你使用

    { IF { MERGEFIELD X } = 3 True False } 
    

    那么如果 X 是 "1+2", "3", "4-1" 你会得到一个 True 结果。在这种情况下,您需要

    { IF "{ MERGEFIELD X }" = 3 True False } 
    

    如果“3”被某种变量字段替换,你可能需要

    { IF "{ MERGEFIELD X }" = "{ theVariable }" 3 True False } 
    

    Word 在这种情况下评估简单算术表达式的倾向并不是唯一可能出错的事情。如果 { MERGEFIELD X } 计算为您在文档中定义的书签的名称,Word 倾向于取消引用该名称,并使用该书签的值而不是 MERGEFIELD 字段的值,除非您将 { MERGEFIELD X } 括在引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多