Word 2010结合了INCLUDEPICTURE和IF

时间:2013-12-04 10:30:57

标签: image if-statement mailmerge word-2010

使用MS Word 2010我试图将INCLUDEPICTURE字段放入IF语句的块中。虽然IF语句和INCLUDEPICTURE正常分离,但它们不能组合使用。

IF声明:

{ IF { MERGEFIELD condition \* MERGEFORMAT } = "expression" "true" "false" \* MERGEFORMAT }

这是正常的。

INCLUDEPICTURE:

{ INCLUDEPICTURE "picture.png" }

这也正常。

两者结合:

{ IF { MERGEFIELD condition \* MERGEFORMAT } = "expression" "{ INCLUDEPICTURE "picture.png" }" "false" \* MERGEFORMAT }

这不起作用。如果IF表达式为true,则根本不显示任何内容。

如何组合IF语句和INCLUDEPICTURE命令?

3 个答案:

答案 0 :(得分:4)

这是一个众所周知的问题(即你是对的,它不起作用)。

不幸的是,没有一个特别好的解决方案 - 最简单的方法是使用空白的1像素图像文件。

通常的出发点是反转嵌套,以便你有更像这样的东西......

{ INCLUDEPICTURE "{ IF "{ MERGEFIELD condition }" = "expression" "picture.png" }" }" \d }

这总是试图插入图片,并在{MERGEFIELD condition}<>的情况下报告(并插入)错误。 “表达”。最简单的分辨率是可以包含一个空白的1像素图片,例如

{ INCLUDEPICTURE "{ IF "{ MERGEFIELD condition }" = "expression" "picture.png" "blank1.png" }" }" \d }

有时更清楚的是删除测试和分配并单独执行,特别是如果有多个测试。在这种情况下,

{ SET picname "{ IF "{ MERGEFIELD condition }" = "expression" "picture.png" "blank1.png" }" }

或者如果您愿意,

{ IF "{ MERGEFIELD condition }" = "expression" "{ SET picname "picture.png" }" "{ SET picname "blank1.png" }" }

您仍然需要在INNCLUDEPICTURE中嵌套IF才能使其正常工作。您可以使用:

{ INCLUDEPICTURE "{ IF TRUE { picname } }" \d }

如果将这些嵌套字段合并到输出文档,则字段将保留在输出中。如果你想要解析字段(例如,因为你需要将输出发送给没有图像文件的人),那么你需要更像这样的东西:

{ IF { INCLUDEPICTURE "{ IF TRUE { picname } }" } { INCLUDEPICTURE "{ IF TRUE { picname } }" \d } }

我相信你可以减少这个

{ IF { INCLUDEPICTURE "{ picname }" } { INCLUDEPICTURE "{ IF TRUE { picname } }" \d } }

事实上,我相信您可以插入您知道存在的任何图形文件的完整路径+名称,而不是第一个{picname},例如。

{ IF { INCLUDEPICTURE "the full pathname of blank1.png" } { INCLUDEPICTURE "{ IF TRUE { picname } }" \d } }

但是你应该检查那些是否适合你。

<强> 修改 FWIW,最近的一些测试表明,当图片出现取消链接时,保存/重新打开会显示重组的链接(在结尾附近有一个* MERGEFORMATINET),并且图片预计位于该位置在这些链接中指出。这是否是由于Word的变化我无法分辨。如果有任何更改,它似乎是尝试在Word在.docx中创建的关系记录中允许一些相对路径寻址。

一些观察......

  • 确保路径有双倍的反斜杠,例如 c:\\ mypath \\ blank1.png。这通常是任何路径所必需的 硬编码到字段中。对于通过嵌套字段进入的路径 代码,请检查。
  • 总的来说,使用INCLUDEPICTURE字段更容易 当文档是.doc而不是.docx时,并确保 文件 - &gt;选项 - &gt;高级 - &gt;常规 - &gt;网络选项 - &gt;文件 - &gt;“更新链接 保存“已选中。否则,Word更有可能被替换 INCLUDEPICTURE字段,其结果无法重新显示为 字段使用Alt-F9
  • 当您想将IF字段中的比较视为字符串时,它 建议用双引号包围它们,就像我做的那样。 否则,{MERGEFIELD}字段解析为a的名称 书签可能不会像您希望的那样表现。否则,间距和 引用主要是个人选择的问题。

到目前为止,这些字段构造都不会处理您可能存在或不存在的图片路径名的情况。如果这是您所需要的,请修改您的原始问题。

答案 1 :(得分:0)

循序渐进指南:
 bibadia的答案是有效的,但是当你犯错误时,单词并没有告诉你,因此很难做到正确。所以我希望这一步一步的回答有所帮助。

第1步:添加图片
在Word 2013 docx中(不知道其他版本)添加

{ INCLUDEPICTURE "C:\\picture.png" }  

注意:使用CTRL + F9添加{},不要输入它们,因为它们不起作用。 使用\\而不是\ 运行邮件合并,按Ctrl + A然后按F9显示图片。

第2步:自动显示
要更改邮件合并文档,请使用(CTRL + A Shift + F9)。将其更改为

{ SET picname "C:\\picture.png" }
{ INCLUDEPICTURE "{ IF TRUE { picname } }" \d }

运行邮件合并 - 图片应该显示,不需要Ctrl + A然后F9

第3步:取消关联
删除\ d

这将允许您通过电子邮件发送文档。由于\ d导致文档创建指向图像文件的链接,而不是包含它。

第4步:添加IF 使用bibadia的解决方案,即

{ SET picname "{ IF "{ MERGEFIELD condition }" = "expression" "picture.png" "blank1.png" }" }

答案 2 :(得分:0)

我测试的另一个选项是使用If语句来检查表达式(在我的示例中检查条目是否为空),如果没有则显示图像,如果不显示某些自定义文本(如果你不希望文本只有空引号,即“”):

{IF {MERGEFIELD my_photo_variable_name} <> "" {INCLUDEPICTURE "{IF TRUE {MERGEFIELD my_photo_variable_name}}" \d} "Text to display if no picture available"}

其翻译为:

如果图像my_photo_variable_name没有值,请在邮件合并中包含图像。

如果没有值,即没有图像,则显示自定义文本Text to display if no picture available