如何记录 Microsoft Word 邮件合并模板?
How to document Microsoft Word mail merge templates?
我正在使用 Word 2010 中的目录邮件合并功能来创建格式化文档(需求),使用 Excel 2010 电子表格作为数据源。
一切正常,但我有一堆紧凑的大括号、格式化的单个字符和字段,只有很少的空格(因为这会改变我的输出)。我插入了带有 CTRL-F9
的字段,Word 将它们视为自己的对象而不是单个字符。
复杂的原因是有很多条件字段,其中一些是嵌套的,并且没有大多数代码用于查看嵌套结构(换行符、缩进等)的典型提示
是否有直接的方法来记录文档中的邮件合并模板代码?或者,如果我想利用空白和其他可读性提示,我是否需要维护一个单独的文本文件?
您可以执行以下操作来帮助编写域代码文档。但是有很多陷阱,这使答案变得复杂。我试图在下面介绍它们。
- 在字段代码中使用格式字符,例如段落标记
大括号改善布局
- 使用"SET"等结果为空的域代码类型插入
文档
- 使用域代码内的隐藏文本插入文档
- 删除引号 (
"
) 个不绝对的字符
必要的
(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 }
后按回车键输入普通Word段落标记,然后在引号字符前插入一些空格。
不同的人可能会选择不同的缩进模式和处理结束“}”的方式。在这个领域没有标准或广泛使用的传统,比如 C 代码。
有个缺点。每次在域代码和域结果视图之间切换时,Word 可能会在长文档中重新分页,并且您很可能会 "lose your place" 在代码中。
(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 }
请记住,您不能将域代码绝对放在域代码 "block" 的任何位置,因为在某些地方,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 插入某些字段类型的方式和 "field code language" 的文档(例如它)意味着存在用引号字符包围某些内容的传统。示例通常在 IF 字段中显示...
{ IF comparand-1 operator comparand-2 "result if true" "result if false" }
在那种情况下,您需要引号,但如果 "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 }
用引号引起来。
我正在使用 Word 2010 中的目录邮件合并功能来创建格式化文档(需求),使用 Excel 2010 电子表格作为数据源。
一切正常,但我有一堆紧凑的大括号、格式化的单个字符和字段,只有很少的空格(因为这会改变我的输出)。我插入了带有 CTRL-F9
的字段,Word 将它们视为自己的对象而不是单个字符。
复杂的原因是有很多条件字段,其中一些是嵌套的,并且没有大多数代码用于查看嵌套结构(换行符、缩进等)的典型提示
是否有直接的方法来记录文档中的邮件合并模板代码?或者,如果我想利用空白和其他可读性提示,我是否需要维护一个单独的文本文件?
您可以执行以下操作来帮助编写域代码文档。但是有很多陷阱,这使答案变得复杂。我试图在下面介绍它们。
- 在字段代码中使用格式字符,例如段落标记 大括号改善布局
- 使用"SET"等结果为空的域代码类型插入 文档
- 使用域代码内的隐藏文本插入文档
- 删除引号 (
"
) 个不绝对的字符
必要的
(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 }
后按回车键输入普通Word段落标记,然后在引号字符前插入一些空格。
不同的人可能会选择不同的缩进模式和处理结束“}”的方式。在这个领域没有标准或广泛使用的传统,比如 C 代码。
有个缺点。每次在域代码和域结果视图之间切换时,Word 可能会在长文档中重新分页,并且您很可能会 "lose your place" 在代码中。
(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 }
请记住,您不能将域代码绝对放在域代码 "block" 的任何位置,因为在某些地方,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 插入某些字段类型的方式和 "field code language" 的文档(例如它)意味着存在用引号字符包围某些内容的传统。示例通常在 IF 字段中显示...
{ IF comparand-1 operator comparand-2 "result if true" "result if false" }
在那种情况下,您需要引号,但如果 "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 }
用引号引起来。