我如何使用 IF 语句来选择要使用 Mergefields 提取哪个图像?

我如何使用 IF 语句来选择要使用 Mergefields 提取哪个图像?

我正在尝试将数据库记录中的图像导出到 Word 文档。该记录包括一张主照片,该照片显示在首页上,其他照片则附加在文档末尾的所有其他信息之后。

当我导出其他照片时,它会将主照片附加到照片列表的末尾。如果它也是主照片,我是否可以运行 IF 语句来跳过此图像?

目前我的情况如下:

{ IF {MERGEFIELD Picture} = {MERGEFIELD PrimaryPicture} "" "{MERGEFIELD Picture}" }

我也尝试过以下操作,但都没有成功:

{ IF {MERGEFIELD Picture} <> {MERGEFIELD PrimaryPicture} " {MERGEFIELD Picture} " ""}

任何指导都将不胜感激!

答案1

(注意:我在这里做了不少假设。如果你的问题实际上是关于其他事情的,那么我认为需要澄清)。

假如说

  1. 您正在使用 Windows 桌面版 Word

  2. 你实际上是在尝试合并图片而不是图片路径

  3. { MERGEFIELD Picture }包含图像的完整路径,可以使用正斜杠或双反斜杠,例如

    G:/test/2020090801 includepicture/img003.jpg
    

或者

    G:\\test\\2020090801 includepicture\\img003.jpg

那么您应该能够做到这一点,但是字段编码有点奇怪。

我认为在大多数情况下可行的字段编码如下,其中全部{} 是特殊字段代码括号对,可以使用 ctrl-F9 插入

{ IF "{ MERGEFIELD Picture }" <> "{ MERGEFIELD PrimaryPicture }" "{ IF { INCLUDEPICTURE "{ IF THINGY { MERGEFIELD Picture } }" } { INCLUDEPICTURE "{ IF THINGY { MERGEFIELD Picture } }" }" }

如果您合并到打印机,或者使用 HTML 格式合并到电子邮件,那就应该可行。

如果您使用 Word 365/2016/2019 甚至 2013 将其合并到新文档中,最初看起来好像字段代码已被正确的图片替换。但是,如果您保存输出,关闭它并重新打开它,我相信您实际上会看到您留下了一个 INCLUDEPICTURE 字段,末尾有一个 * MERGEFORMATINET 选项(它应该在替换时保留图片大小)。

如果您使用附件合并到电子邮件,附件将类似于保存的文档。也就是说,当收件人打开附件时,用户可能会看到图片(应该是正确的),或者他们可能会看到带有 *MERGEFORMATINET 的字段代码。问题是 INCLUDEPICTURE 字段中的文件名可能是执行合并的计算机上文件系统中的文件名,或者即使它位于公共 Internet(例如 http://)地址,收件人也可能无法访问它。因此,如果他们随后选择这些 INCLUDEPICTURE 字段并按 F9,他们最终可能会得到一个带有红色十字和错误消息的图片边框。最好尝试让他们选择字段并按 ctrl-shift-F9 来“取消链接”,即用现有结果(图像)替换它们。

如果您不使用这种看起来相当愚蠢的结构,则合并结果往往会显示数据源中每条记录的相同图片。这意味着合并到打印无法工作,合并到 HTML 电子邮件可能也行不通,而合并到新文档时,用户将始终必须选择并重新执行 (F9) INCLUDEPICTURE 字段才能获得正确的图片。合并到电子邮件附件的工作方式与合并到新文档的工作方式非常相似,因此在这种情况下,用户需要更新他们收到的附件中的字段。但是,如果图片位于执行合并的计算机的硬盘上,则用户将看不到这些图片,他们只会看到带有红色十字和错误消息的轮廓。

如果您浏览互联网,您可能会发现许多地方都描述了这种方法,但不幸的是,人们似乎有两种经历之一。有些人经历了上述情况。其他人似乎最终得到了完全未链接的字段代码,而不必担心 ctrl-shift-F9 的事情。我不知道为什么会这样。这可能是一个配置问题,但我认为更可能是 Word 2013 或 2016 中发生了一些变化。

顺便说一句,我相信如果你使用这种编码风格,即使是带有单个反斜杠的路径名,例如

    G:\test\2020090801 includepicture\img003.jpg

可以正确处理。但是,ISTR 指出路径长度存在一些限制(路径总长度可能为 255 个字符),并且即使将所有反斜杠加倍,UNC 路径名也可能导致问题。

正如我所提到的,这是一个非常奇怪的字段编码。通常,IF 字段如下所示:

{ IF operand1 operator operand2 "result-if-true" "optional result-if-false" }

例如

{ IF { x } = 1 "some text" }

但在这种情况下,我们有

{ IF { INCLUDEPICTURE something } { INCLUDEPICTURE something } }

这实际上根本不符合 Word 的任何常规 IF 字段模式。{ INCLUDEPICTURE something } 也不会生成任何类型的“TRUE”结果。它似乎必须存在。

即使是嵌套代码

{ IF THINGY { MERGEFIELD Picture } }

不遵循 IF 字段语法模式。在其他地方,你会看到这样的写法

{ IF TRUE { MERGEFIELD Picture } }

这使得它看起来就像符合模式

{ IF condition "result-if-true" }

但实际上你可以用任何旧词(或多或少)代替 TRUE。甚至是 FALSE。你似乎不能做的只是使用更明显的

{ MERGEFIELD Picture }

我用 THINGY 来试图表明不是这是一个典型的 Word 逻辑表达式。

在不需要 IF 语句来决定是否插入图像的情况下,可以使用更简单的构造

{ INCLUDEPICTURE "{ IF THINGY { MERGEFIELD Picture } }" }

同样,如果没有“IF THINGY”部分,合并往往会为数据源中的每条记录插入相同的图像。

还有另一种方法可以插入图像而不将其嵌套在 IF 字段中,该方法(广义上)如下:

{ INCLUDEPICTURE "{ IF "{ MERGEFIELD Picture }" <> "{ MERGEFIELD PrimaryPicture }" "{ MERGEFIELD Picture }" "<the path+file name of a 1-pixel picture>" } }

但是,您可能需要添加一些 { IF THINGY } 内容才能使其正常工作,而我最近还没有测试过它。

相关内容