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 символов), поэтому, опять же, это только опция для некоторых типов источников данных.