【问题标题】:Word 2010 combining INCLUDEPICTURE and IFWord 2010 结合 INCLUDEPICTURE 和 IF
【发布时间】:2013-12-20 19:00:45
【问题描述】:

使用 MS Word 2010 我试图将 INCLUDEPICTURE 字段放入 IF 语句的块中。虽然 IF 语句和 INCLUDEPICTURE 可以单独工作,但它们不能组合使用。

IF 语句:

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

这可以正常工作。

包括图片:

{ INCLUDEPICTURE "picture.png" }

这也可以正常工作。

两者结合:

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

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

如何将 IF 语句和 INCLUDEPICTURE 命令结合起来?

【问题讨论】:

    标签: image if-statement mailmerge word-2010


    【解决方案1】:

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

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

    通常的起点是反转嵌套,这样你就可以得到更像这样的东西......

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

    这总是尝试插入图片,并且在{ MERGEFIELD condition } "expression" 的情况下会报告(并插入)错误。最简单的分辨率是有一张空白的 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 时,并确保 文件->选项->高级->常规->Web选项->文件->“更新链接 保存时”被选中。否则,Word 更有可能替换 INCLUDEPICTURE 字段的结果无法重新显示为 使用 Alt-F9 的字段
    • 当您想将 IF 字段中的比较数视为字符串时,它 建议用双引号将它们括起来,就像我所做的那样。 否则,解析为名称的 { MERGEFIELD } 字段 书签的行为可能不像您希望的那样。否则,间距和 报价很大程度上取决于个人选择。

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

    【讨论】:

    • 我正在使用您上面的方法,它在条件为真时有效,但在我执行 F9 时图像永远不会刷新。你知道为什么吗?我使用的代码是{ INCLUDEPICTURE "{ IF "{ MERGEFIELD X}" = "True" "{ MERGEFIELD blank }" " { MERGEFIELD path }" }" \d}
    • 问题通常是“文件路径+名称中不应该存在的空格”。例如,如果您实际使用的是您在评论中引用的编码,则 { MERGEFIELD path } 字段之前有一个不应存在的空格。 (当然,这很可能是一个错字,但即便如此,这也是我首先要寻找的)。另一个主要可能性是 X 的值不是“True”而是“TRUE”、“true”、“-1”或其他任何值。
    • 在 word 2013 中,您可以通过删除 \d 来取消链接图像 .. 即 { INCLUDEPICTURE "{ IF TRUE { picname } }" } ...这也是我可以取消链接的唯一方法,我无法让您的建议生效。
    • @eddyparkinson:您自己的研究+答案是否解决了您的评论?如果是这样,那很好。如果不是,我的第一个观察结果是其中一些内容仅适用于 .doc,而不适用于 .docx,甚至在所谓的“修复”之后可能会发生变化。
    • bibadia,你说得对,“word version/doc/docx”导致了我使用 docx 和 word 2013 的复杂性。很高兴知道其他人使用了什么。
    【解决方案2】:

    分步指南:
    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" }" }
    

    【讨论】:

      【解决方案3】:

      我测试过的另一个选项是使用 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

      【讨论】:

        猜你喜欢
        • 2016-02-04
        • 2022-01-21
        • 2013-04-27
        • 1970-01-01
        • 2019-04-08
        • 2018-08-12
        • 2020-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多