Word 2010, сочетающий INCLUDEPICTURE и IF

Используя MS Word 2010, я пытаюсь поместить поле INCLUDEPICTURE в блок оператора IF. Хотя оператор IF и INCLUDEPICTURE правильно работают по отдельности, они не работают вместе.

Если заявление:

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

Это работает правильно.

ВКЛЮЧИТЬ ИЗОБРАЖЕНИЕ:

{ INCLUDEPICTURE "picture.png" }

Это тоже работает корректно.

Сочетание двух:

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

Это не работает. Если выражение ЕСЛИ истинно, ничего не отображается вообще.

Как я могу объединить оператор IF и команду INCLUDEPICTURE?


person user3065343    schedule 04.12.2013    source источник


Ответы (3)


Это известная проблема (т.е. вы правы, она не работает).

К сожалению, не существует особенно хорошего решения — самое простое предполагает использование пустого файла изображения размером 1 пиксель.

Обычная отправная точка - инвертировать вложение, чтобы у вас было что-то вроде этого...

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

Это всегда пытается вставить изображение и сообщает (и вставляет) об ошибке в случае, когда {условие MERGEFIELD} ‹> "выражение". Самое простое разрешение — это пустое 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" }" }

Вам по-прежнему нужен IF, вложенный в INNCLUDEPICTURE, чтобы заставить его работать. Ты можешь использовать:

{ 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, и убедиться, что File->Options->Advanced->General->Web options->Files->"Update ссылки при сохранении" проверяется. В противном случае Word, скорее всего, заменит поля INCLUDEPICTURE результатом, который нельзя повторно отобразить как поле с помощью сочетания клавиш Alt-F9.
  • Если вы хотите рассматривать сравнения в поле IF как строки, рекомендуется заключать их в двойные кавычки, как это сделал я. В противном случае поле {MERGEFIELD}, разрешающее имя закладки, может вести себя не так, как хотелось бы. В противном случае интервалы и цитирование в значительной степени являются вопросом личного выбора.

До сих пор ни одна из этих конструкций полей не имела дело с ситуацией, когда у вас есть имена путей для изображений, которые могут существовать или не существовать. Если это то, что вам нужно, измените исходный вопрос.

person Community    schedule 04.12.2013
comment
я использую вашу методологию выше, и она работает, когда условие истинно, но изображение никогда не обновляется, когда я нажимаю F9. Ты знаешь почему? Я использую код { INCLUDEPICTURE "{ IF "{ MERGEFIELD X}" = "True" "{ MERGEFIELD blank }" " { MERGEFIELD path }" }" \d} - person JT2013; 14.08.2014
comment
Проблема часто заключается в пробелах в пути + имени файла, которых там быть не должно. Например, если вы на самом деле используете кодировку, указанную в своем комментарии, перед полем {ПУТЬ MERGEFIELD} есть пробел, которого не должно быть. (Конечно, это вполне может быть опечатка, но все же это то, что я бы искал в первую очередь). Другая основная возможность заключается в том, что значение X не True, а TRUE, true, -1 или что-то еще. - person ; 14.08.2014
comment
В Word 2013 вы можете отменить связь с изображением, удалив \d .. т. е. {INCLUDEPICTURE {IF TRUE {picname}} } ... Также это единственный способ, которым я мог отключить связь, я не мог заставить ваше предложение работать. - person eddyparkinson; 16.07.2015
comment
@eddyparkinson: ваше собственное исследование + ответ разрешило ваш комментарий? Если так, хорошо. Если нет, то мое первое наблюдение будет заключаться в том, что некоторые из этих вещей работают только с .doc, а не .docx, и даже это может измениться после так называемых исправлений. - person ; 16.07.2015
comment
bibadia, вы правы, версия word/doc/docx вызывает сложности. Я использовал docx и word 2013. Было бы неплохо узнать, что использовали другие. - person eddyparkinson; 17.07.2015
comment
@eddyparkinson: на самом деле я давно не посещал это, и теперь я это делаю, я обнаружил, что самый длинный набор полей кажется работает нормально, когда я впервые объединяюсь, т. е. в документе не остается кодов полей. , но после сохранения+повторного открытия ссылки восстанавливаются. Изображения появляются при повторном открытии только в том случае, если они находятся там, где их ожидают ссылки. У меня есть ощущение, что что-то в этой области изменилось (снова), но я не уверен. По большей части то, что на самом деле сейчас работает, — это использовать длинный набор полей и опускать \d, но в этом случае изображения с путями UNC (и, возможно, другими) не подбираются. - person ; 05.03.2016

Пошаговое руководство:
ответ 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: добавьте ЕСЛИ Используйте решение bibadia, т.е.

{ SET picname "{ IF "{ MERGEFIELD condition }" = "expression" "picture.png" "blank1.png" }" }
person eddyparkinson    schedule 16.07.2015

Другой вариант, который я тестировал, — использовать оператор 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.

person algorhythm    schedule 21.01.2016