Как я могу использовать точки в именах полей MailMerge?

У меня есть список имен полей слияния, переданных в мое приложение вместе с документом Word. Поля слияния включают точки и символы подчеркивания в форме «Here.Is.An.Example.Merge_Field». Эти разделители обязательны — символы можно изменить, но нельзя их совсем убрать.

Некоторые из этих полей слияния содержатся в источнике данных, созданном для документа. В источнике данных нет данных для имен полей слияния — само слияние происходит в другом месте процесса.

Я прикрепляю документ к источнику данных, как показано ниже:

WordApplication.MailMerge.OpenDataSource(DataFilePath);

Это загружает поля слияния в меню по желанию, но все точки исчезли. Теперь у меня есть «HereIsAnExampleMerge_Field», что вызывает проблемы в других точках моего приложения.

Как запретить Word удалять эти символы?


person Hecksa    schedule 30.07.2014    source источник


Ответы (1)


Я не думаю, что вы можете, потому что, насколько я знаю, имена полей слияния изменены, чтобы быть допустимыми именами закладок, которые имеют определенные ограничения.

(См., например, Каковы ограничения для имен закладок в Microsoft Word? для обсуждения, за исключением того, что в этом случае я думаю, что Word будет вставлять "M" перед начальным "_". Кроме того, имена длиной более 40 символов искажаются для получения уникальных имен.)

Итак, что делать, зависит от того, с какими проблемами вы столкнулись.

Вы можете получить имена полей, которые Word фактически использует (т. е. его искаженные имена), из ActiveDocument.MailMerge.DataSource.DataFields или .FieldNames. Насколько я знаю, они находятся в той же последовательности, что и поля в источнике данных, хотя Word иногда переупорядочивает поля для отображения в диалоговом окне «Редактировать получателей» (например, он сортирует имена полей, которые считает именами полей адреса, в определенной последовательности). Так что это должно позволить вам сопоставить его имена полей с оригиналами.

В качестве альтернативы, если ваш код должен вставить поля {MERGEFIELD} в основной документ слияния и знает последовательность полей в источнике данных, вы можете использовать номера полей (1 для первого поля, извлеченного Word и т. д.), например { ПОЛЕ СЛИЯНИЯ 1 }. Но будьте осторожны, так как я никогда не видел, чтобы это средство было задокументировано Microsoft.

person Community    schedule 01.08.2014