3

У меня есть этот файл Excel, который имеет несколько листов, которые я хочу импортировать в формат букв Microsoft Word.

Сначала я начал слияние почты с этим файлом Excel и выбрал этот конкретный лист / таблицу, затем я заполнил письмо необходимыми полями и закончил.

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

Сообщение об ошибке:

Это поле слияния используется в основном документе, но его нет в источнике данных. Вы можете удалить недопустимое поле слияния из основного документа. Или вы можете заменить его допустимым полем слияния из источника данных.

Нужные мне столбцы взяты из разных таблиц в файле Excel, поэтому я получил данные отдельно.

Как мне исправить ошибку?

3 ответа3

0

MailMerge для нескольких документов должен иметь одну таблицу со строкой для каждой записи. Самый простой способ сделать это - объединить листы, чтобы у вас была одна таблица. Заполнение с использованием этой таблицы создаст x документов, где x - количество строк без заголовка в таблице.

Пример таблицы данных для нескольких документов

0

Вы пытались зайти в "Выбор получателей" и снова выбрать исходный лист? Если нет, сделайте это и выберите правильный лист.

0

IMO, предложенный jmac, вероятно, самый простой и надежный, если у вас нет доступа к хорошим ресурсам кодирования. Или согласитесь с тем, что вам необходимо скопировать и изменить основной документ Mail Merge для объединения данных с каждого листа.

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

То, что можно использовать, также зависит от того, хотите ли вы объединить все данные из нескольких листов в один выход или хотите, чтобы отдельные выходы на листе.

Если вы используете поля ADDRESSBLOCK или GREETINGLINE, которые основаны на отображении полей, все еще сложнее.

Для "отдельных выходов на листе",

а. если на каждом листе используются одинаковые столбцы, но с разными именами, вы можете использовать номер столбца вместо имени. Например, предположим, что ваша рабочая книга содержит 2 листа, Sheet1 и Sheet2, и на Листе 1 столбец 1 называется namea, а на Листе 2 столбец 1 называется nameb. Затем (с помощью Alt-F9 для просмотра имен полей) вам понадобится следующее в вашем основном документе слияния для листа1:

{MERGEFIELD namea}

для листа2

{MERGEFIELD nameb}

Но

{MERGEFIELD 1}

должно работать в обоих случаях. (Это не задокументировано нигде, я знаю).

б. Вы можете использовать "Поля адреса", а не "Поля базы данных". Это страдает от ограничения, которое я обычно воспринимаю как showtopper (я опишу это позже), но оно работает так:

Вместо использования имени столбца ("namea") через {MERGEFIELD namea}, вы используете поле адреса, подобное этому

{MERGEFIELD "Имя" \m}

При этом используется стандартный набор имен полей, которые вы "сопоставляете" (или "сопоставляете") с именами столбцов на листе Excel. Вы можете выбрать эти поля в полном диалоговом окне Вставить поле, выбрав опцию "Адрес" вместо опции по умолчанию "База данных", и вы можете переназначить поля с помощью кнопки «Сопоставить поля ...» в этом диалоговом окне. Вам необходимо установить флажок Запомнить это соответствие для этого набора источников данных на этом компьютере в нижней части. Затем, когда вы переключаетесь с одного источника данных на другой, Word должен помнить правильные сопоставления.

Это теория, но на практике я думаю, что в большинстве сценариев это неосуществимый подход. Это связано с тем, что Word запоминает (в реестре Windows) только одно сопоставление для каждого имени базы данных. Таким образом, если у вас есть поле с именем namea на одном листе, и вам нужно сопоставить его с именем, а на другом листе вам нужно сопоставить имя с фамилией, вы не можете это сделать (AFAICS). Хуже того, если кто-то изменит сопоставления, существующие документы слияния могут в итоге получить неверные данные, и пользователь вообще не будет предупрежден.

Подходы, которые включают программирование, включают следующее:

с. у вас есть код (например, код VBA), который собирает и сохраняет нужные вам имена на каждом листе, а затем вставляет правильные имена для каждого поля MERGEFIELD. Для этого вы можете использовать вложенные поля, фактически делая свое собственное отображение. Снова используя пример из (a), вы можете, например, иметь переменную документа с именем "thename", использовать VBA для заполнения ее именами namea или nameb и использовать следующее вложенное поле:

{MERGEFIELD {DOCVARIABLE thename}}

(и это работает только в том случае, если вы можете заставить свой VBA выполнять замены до того, как Word попытается проверить имена полей)

д. (если вам требуется, чтобы выбранные вами листы были объединены в одно объединение, а не одно объединение на лист), вы либо пишете код для автоматизации Excel для объединения листов с использованием объектной модели Excel, либо вы получаете Excel (или Access) для этого настроив запрос UNION для объединения листов. Используя наш пример снова, UNION может выглядеть так:

ВЫБЕРИТЕ 1 AS [thesheet], namea AS [thename] ОТ [Sheet1 $]

UNION

ВЫБЕРИТЕ 2, nameb ОТ [Sheet2 $]

Хотя вы можете настроить запрос по этим направлениям в Word VBA, Word имеет ограничение в 511 символов в своих запросах MailMerge, которое вы, скорее всего, превысите. Вы можете настроить запрос в новой книге Excel, чтобы сделать что-то похожее, но я не знаю, есть ли в этом продукте длина запроса или другие ограничения. Кроме того, вы, вероятно, потеряете любые "памятные" данные (длиной более 255 символов), поэтому, опять же, это только опция для некоторых типов источников данных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .