Режим MultiRow: один документ с данными из нескольких строк

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

Предположим, что у нас есть вот такая таблица в Excel, и перед нами стоит задача сформировать приказ на премирование сотрудников:

Причём, должно получиться не 14 отдельных документов (по количеству сотрудников), а один (или 4, по одному приказу на каждый отдел)

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

Включить режим MultiRow можно в настройках на вкладке «Дополнительно»:

 

Если нам нужен ОДИН общий приказ, мы включаем только первую галочку («Включить режим Multirow»), а если нужны отдельные приказы для 4 отделов, то включаем вторую опцию «Формировать по каждому шаблону столько файлов, сколько уникальных значений содержится в столбце», и указываем номер столбца с отделами — 3 «С»:

 

Теперь переходим к настройке шаблона документа под режим Multirow.
В шаблоне мы делаем только одну строку (абзац текста) для подстановки данных, но помечаем эту строку специальной меткой, чтобы указать программе, что эту строку нужно размножить на несколько строк (сколько строк с исходными данными есть в исходной таблице Excel)

Инструкции по настройке шаблонов для режима Multirow:

 

Мы будем использовать такой шаблон:

 

ВНИМАНИЕ: настроенный файл шаблона и исходная таблицу Excel, на примере которых написана эта инструкция, прикреплены в конце этой статьи.
Можете скачать файлы, закинуть шаблон в папку Шаблоны, открыть таблицу Excel, и протестировать.

 

После того, как мы настроили шаблон, и поместили его в папку Шаблоны, можно пробовать сформировать документы.
Для этого:

  1. выделяем в исходной таблице несколько строк
    (либо в настройках на вкладке «Исходная таблица» включаем галочку «Формировать документы ПО ВСЕМ заполненным строкам таблицы»)
  2. нажимаем на панели инструментов кнопку Сформировать документы

 

Если мы всё настроили правильно, то по завершении заполнения приказов прогрессбар будет выглядеть так:

а в папке Документы должно появиться 4 файла:
(использовалась маска имени файла вида {%filename%} - {Отдел}.{%ext%} )

Документы

приказ о премировании - бухгалтерия.docx

приказ о премировании - сбыт.docx

приказ о премировании - склад.docx

приказ о премировании - снабжение.docx

 

Открываем один из сформированных файлов, и видим в нём следующее:

 

Если же мы в настройках не включали опцию «Формировать по каждому шаблону столько файлов, сколько уникальных значений содержится в столбце», то на выходе должны получить ОДИН документ, с данными из всех строк исходной таблицы:

 

Комментарии

Доброго времени суток. Спасибо большое за программу.
Воспользовался программой Multirow и столкнулся с проблемой, что при вставке данных из таблицы нарушается строка и вставленные данные с новой строки. Возможно как-то сделать чтобы вставлялись не новая строка, а продолжался текст?

Увы, такой вариант тоже не сработает.
В программе такое не предусмотрено, - ранее никто из пользователей не просил скрестить ежа с ужом подставлять в письма содержимое заполненного документа Word в режиме Multirow.

Могу доработать программу, - но только за дополнительную плату (работы много очень)

Спасибо за быстрый ответ!
А если сначала сформировать файлы, положить их в какую-нибудь папку, и при повторном запуске программы скопировать содержимое файлов в письма (аналогично вставки по метке PasteWordDoc)?

Здравствуйте, Светлана
Такой возможности нет, - пока только прикрепление заполненных файлов.

Но вы можете получить письмо нужного вида, настроив шаблон текста письма в формате HTML, — чтобы получить на выходе форматированный текст с подставленными значениями
(только на текст письма не распространяется функция Multirow)

Спасибо огромное за функцию MultiRow! Все получилось с первого раза! Но возник вопрос, возможен ли перенос содержимого созданного документа Word в тело письма? Спасибо!

Так в Excel выделяете блок из 3 строк, и назначаете ему метку (имя) Multirow
В Excel всё должно корректно копироваться, независимо от количества строк в именованном диапазоне

Другими словами, задача та же, что и для Ворда. А в Экселе как это же осуществить? Какой хитростью воспользоваться?
Заранее спасибо!

Михаил, из описания проблема непонятна.
Если сами не разберетесь, - звоните в скайп, попробую помочь
От вас для этого надо: http://ExcelVBA.ru/help

Отлично! Действительно сработало, спасибо!
А в Экселе возможно копирование нескольких строчек? Если указать каждую строчку MultiRow1, MultiRow2, MultiRow3, то в результате он перечислит значения из исходной таблицы, но в виде:
Иванов
Петров
Сидоров
Иван
Петр
Сидор
Иванович
Петрович
Сидорович
А должно быть:
Иванов
Иван
Иванович
Петров
Петр
Петрович и т.д.

Здравствуйте, Михаил
Закладки с именами типа MultiRow1 и MultiRow2 программа должна понимать (обрабатываются любые закладки, название которых начинается со слова MultiRow)
Насчёт нескольких строк (абзацев) под одной закладкой - не проверял

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

Могу предложить неочевидный, но точно работающий способ:
1) вставляете в шаблон ТАБЛИЦУ из 2 строк и одного столбца
2) первую строку делаете минимальной высоты, установкой размера шрифта = 1 пункт
3) во вторую ячейку (строку) вставляете несколько абзацев размножаемого текста
4) второй строке таблицы назначаете метку Multirow
5) делаете рамки таблицы невидимыми

так точно будет работать, и выглядеть результат будет также, как и без таблицы.
PS: первая (пустая) строка таблицы нужна, т.к. без неё размножение строк не всегда корректно выполняется.

Добрый день!
Программа действительно мощная, но возник вопрос:
Выделаю курсором (подвожу к строке или абзацу СЛЕВА) несколько строчек (абзацы разные, т.к. разделены Энтером), создаю закладку MultiRow. Запускаю формирование - пустота. Пробовал каждую строку (абзац в моём случае) загонять в отдельную закладку MultiRow1 и MultiRow2 - то же самое, не понимает программа 1 и 2 в названии закладок.
Проверяю работоспособность на одной строке - всё в порядке.
Что я не учёл?
Спасибо!

Наконец то понял как ! ))) Надо подвести мыша слева от строки (за границей таблицы,стрелка БЕЛОГО ЦВЕТА будет направлена в правый верхний угол) и ОДИН РАЗ ЩЕЛКНУТЬ (выделится строка целиком)

В статье написано:

ВАЖНО! Перед назначением закладки, надо выделить абзац текста или строку таблицы ЦЕЛИКОМ.

Для этого, подведите курсор к строке или абзацу СЛЕВА, — при этом, курсор изменит направление, - стрелка будет направлена в правый верхний угол.

Т.е. не надо выделять ячейки строки!
Дало подвести мыша слева от строки, и ОДИН РАЗ ЩЕЛКНУТЬ (выделится строка целиком)
После этого назначить закладку.
И всё будет работать.

Как-то вчера заработало после долгих мучений, но принципа выделения строк я так и не понял, таблица из одной строки создаваться не хочет, как минимум 2 строки приходится делать

Видимо, неправильно назначена метка multirow для строки таблицы (перед назначением метки, не вся строка была выделена, а только ячейки этой строки)
Потому размножение строки не срабатывает

Если сами не разберетесь, - могу помочь: http://ExcelVBA.ru/help

С таблицами всё таки не получилось разобраться, таблицу или её строку c закладкой из шаблона стирает, на выходном документе пустота. Простые строки с закладками multirow работают

Действительно, всё отлично работает.
Я немного не поняла объяснений, показалось, что MultiRow1, MultiRow2 и т.п. - это служебные закладки, которые создает не пользователь, а размножает сама программа.
Замечательно. Спасибо за ответ.

А кто вам сказал, что закладка может быть только одна?
Создайте закладки MultiRow2, MultiRow3 и т.д., и проверьте, — всё будет работать.
(в статье на втором скриншоте показано и написано про 2 закладки, - для увеличения скриншота, щелкните по нему мышом)

PS: На всякий случай, дополнил статью текстовым описанием, чтобы было понятнее.

Здравствуйте. Программа очень удобная.
Правда, сначала MultiRow не работала с таблицей - просто не обрабатывала загнанные в ячейки {поля#}. Но я попробовала создавать таблицы разными способами, и какой-то из вариантов сработал, всё получилось.
Но у меня есть проблема. В моих документах мне очень нужно иметь три разных блока с подобным многострочным заполнением. А присваиваемая закладка только одна. Нельзя ли ввести ещё пару дополнительных? Что-нибудь вроде "Второй_MultiRow" и "Третий_MultiRow".
Это было бы спасением.
Но если нельзя - спасибо за программу в любом случае.

Здравствуйте
В моей программе нет такой возможности, - только создание отдельных документов.
Воспользуйтесь штатной функцией Word «слияние», — она как раз для такого предназначена.

Добрый день,

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

Если по инструкциям разобраться не можете, - могу помочь с настройкой.
От вас для этого надо: http://ExcelVBA.ru/help

Присоединяюсь к последнему вопросу. У меня функция multirow не работает, опишите, пожалуйста, более подробно

Не уверен что полностью понял, т.е. шаблон должен выглядеть след. образом {ФИО#Multirow} ?

Для того этот режим и сделан, чтобы вы в шаблоне оставили ОДНУ строку (с меткой Multirow) - а программа сама размножила эту строку столько раз, сколько строк в исходной таблице Excel выделено

Здравствуйте, реализовать разное количество строк в шаблоне и результате, которые не всегда будут совпадать. Т.е. в шаблоне я проставлю 20(допустим это предельное значение) а из исходной таблицы я буду всегда выбирать по разному от 10 до 20ти. В результате тогда будут оставаться эти неиспользованные строки с соотв. названия {ФИО}, можно ли от них избавиться? Надеюсь вы меня поняли)

Здравствуйте, Михаил
Для таблицы, всё делается аналогично, - только метку Multirow надо назначать строке таблицы, а не абзацу, как в этом примере

Здравствуйте!

Можно ли так же формировать данные в таблицу в Ворде ? Просто со списком понятно, а если необходимо в Ворде составить таблицу ?

Во как :) Даже мой приер использовали D)