Макросы для обработки результатов слияния в MS Word

О.В. Комлев

Читатели Дидактора очень часто возвращаются к опубликованным материалам многолетней давности. Что позволяет сделать вывод что они до сих пор актуальны. К примеру, публикация восьмилетней давности о применении операции слияния для быстрого создания однотипных документов в MS Word живо интересует педагогов. Возник ряд вопросов. Именно эти вопросы побудили моего многолетнего соратника и технического консультанта Олега Валентиновича Комлева создать макрос для обработки результатов слияния документов MS WORD и дать подробный комментарий по их использованию.

При использовании операции слиянии получается один общий документ,  состоящий из нескольких страниц. После этого можно распечатать все или некоторые страницы. Чтобы создать сертификаты в электронном виде, можно  распечатать страницы на виртуальном принтере (например, PDFCreator или Universal Document Converter) и получить каждую страницу в  отдельном графическом или pdf-файле. Однако, чаще всего эти файлы просто пронумерованы. Между тем, пользователю желательно, например, включить в имя файла ФИО участника.

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

Если включить в шаблон специальные макросы, то это вполне можно сделать. А именно, можно  каждую страницу записать в отдельный файл одного из следующих форматов: docx (документ Word), pdf или xps (MS XPS Document). При этом каждому такому файлу можно дать имя с помощью полей списка (например, поместить в имя файла ФИО участника).

Затем можно напечатать каждый  созданный docx-документ на виртуальном принтере, например, в формате jpeg или png. Обычно имя файла при этом сохраняется и мы получим электронные сертификаты в готовом виде.

Picture background

Если по каким-то причинам это сделать не удалось, можно напечатать результат слияния на виртуальном принтере в виде пронумерованных файлов, а затем создать копии этих файлов, в имени которых номер заменен заданным полем (например, ФИО участника).

Прежде всего нужно подготовить шаблон сертификатов в виде документа с макросами на основе приведенного шаблона. Во избежание путаницы лучше завести отдельную папку, где будет находится этот шаблон и нет других файлов (кроме, разве что, xls-списка c данными для слияния). Шаблон должен иметь имя вида «Сертификат-template.docm»

Первая часть имени может быть любой («Грамота_«, «Диплом_участника_» или «Уведомление для_»), но имя шаблона  должно оканчиваться на «template», а расширение файла должно быть «docm» (документ MS Word с макросами). В дальнейшем template будет заменено на заданное поле (поля), и отдельный файл будет называться, например, «Сертификат-Иванова_Сергея.pdf» или «Уведомление для_Петровой Марии от 12.10.2020.jpg».

Обратите внимание, что пробелов перед словом «template» быть  не должно, поэтому лучше вместо пробелов использовать символ «_». Если это нежелательно, нужно использовать параметр /r (см.ниже).

В созданном шаблоне должна быть одна страница без нижнего колонтитула. На странице должен быть верхний колонтитул из одной строки. В эту строку нужно поместить поле (поля) слияния,  чтобы сформировать часть имени файла (эта часть заменит собой слово template). Например, там можно поместить поле с ФИО участника, или составить строку из нескольких полей с нужными разделителями (например, «[ФИО] от [дата]»).  Поскольку, эта строка должна задавать имя файла, в ней должны быть только символы, пригодные для именования файлов. Например, не должно быть символов  « \ / ? : * » >< | ». Если предполагается дальнейшая обработка созданных файлов в каких-то массовых обработчиках, лучше  не  использовать в имени файла пробелы (можно заменить их знаками «_» или «-« ).     Чтобы заменить пробел на символ «_» во вставленных в колонтитул полях, напишите в самом конце строки колонтитула сочетание «/_» (без кавычек). Символ после / может быть и другой (например,  «/-» или «/#». Это позволит создать файлы с именем «Сертификат-Иванова_Сергея.pdf» или «Сертификат-Иванова-Сергея.pdf» или «Сертификат-Иванова#Сергея.pdf».

Чтобы колонтитула не было видно в напечатанном документе или сформированном графическом файле, закройте колонтитул каким-то рисунком или фигурой «белый прямоугольник».  Или установите у текста колонтитула  атрибут «скрытый» (можно выделить текст колонтитула и нажать Ctrl-Shift-H, где Н — английская буква).

После подготовки шаблона, произведите слияние. В полученном файле (обычно он автоматически получает имя «ПисьмаN.docx») при необходимости произведите индивидуальные изменения, в том числе удалите лишнюю  пустую страницу, если она появилась. Затем сохраните этот файл в ту же папку, где находится шаблон, под тем же именем, что и шаблон, но расширение должно быть «.docx», а слово template из имени должно быть удалено. Например, если шаблон назывался «Сертификат-template.docm» или «Уведомление для_template.docm», то результат слияния должен быть назван «Сертификат-.docx» или «Уведомление для_.docx», соответственно. Дать файлу имя с пробелом в конце («Уведомление для .docx») нельзя, но можно применить специальный прием с использованием параметра /r (см. далее).

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

1) Разделение результата слияния на отдельные страницы.

Вернитесь в шаблон  и из меню «Вид\Макросы»выполните макрос «SplitPages2DOCX». Файл с результатом слияния  будет разделен на страницы, каждая страница записана в отдельный файл docx -формата, а к имени каждого файла добавлено значение строки из колонтитула.

2) Получение отдельных страниц в pfd-формате.

Переключитесь в окно с шаблоном и из меню «Вид\Макросы» выполните макрос «SplitPages2PDF».

Файл с результатом слияния  будет разделен на страницы, каждая страница записана в отдельный файл pdf-формата, а к имени каждого файла добавлено значение строки из колонтитула.

3) Получение отдельных страниц в xps-формате.

Переключитесь в окно с шаблоном и из меню «Вид\Макросы»выполните макрос «SplitPages2XPS».

Файл с результатом слияния  будет разделен на страницы, каждая страница записана в отдельный файл xps-формата, а к имени каждого файла добавлено значение строки из колонтитула.

Для выполнения операций 2 и 3 должна быть установлена надстройка MS Word «Cохранение в формате PDF или XPS» (обычно это требуется для старых версий MS Office). Если ее нет, будет выдано соответствующее сообщение, тогда необходимо данную надстройку установить.

При формировании pdf или xps-файлов могут возникнуть проблемы со шрифтами:  некоторые буквы в надписях могут быть заменены знаками вопроса, квадратиками или «иероглифами». Возможно, помогут параметры «/f» (режим встраивания шрифтов), «/u» (формат ISO19005_1),  добавленные в конец строки в верхнем колонтитуле после параметра «/_». Т.е. верхний колонтитул шаблона может заканчиваться как «/_/f/u», «/_/f»,или «/_/u». Если пробел заменять не нужно, укажите символ пробела после /  . Например,  «/ /f/u».

Если это не помогает, замените надписи в документе рисунком с нарисованной надписью. Для вставляемых полей   измените гарнитуры шрифтов на другие (рекомендуется использовать  Times New Roman, Arial, Courier).  

Если необходимо отделять общую часть имени от вставленных полей именно пробелом, то это можно сделать следующим образом.  Пусть имя каждого файла должно быть в виде «Уведомление для Иванова Сергея.docx», «Уведомление для Петровой Марии.docx», и т.д. Тогда шаблон называем  «Уведомление для _template.docm», но в этом шаблоне в конце верхнего колонтитула указываем параметр /r  (означает – «удалить символ перед template»). Т.е. верхний колонтитул может выглядеть так (без кавычек): [ФИрп]/ /r, где [ФИрп] – поле слияния, «/ » – параметр, говорящий, что пробел заменять каким-то знаком не нужно, «/r» – в имени шаблона удалить еще один символ перед template. При необходимости после «/ » перед /r можно добавить и другие параметры (/f/u), если это необходимо.

4) Получение отдельных страниц в необходимом формате (jpg, png, pdf) с помощью виртуального принтера.

Установите  виртуальный принтер, способный  при печати автоматически создавать файлы в необходимом формате. Настройте его на автоматическое создание файлов в нужном формате с сохранением исходного имени  (или с включением исходного имени в имя создаваемого файла). Настройте у этого принтера другие желаемые параметры (размер, качество, папку для создаваемых файлов и т.д.) и сделайте его  принтером по умолчанию. Выполните операцию 1 (разделение результата слияния на отдельные docx-файлы) и все созданные  docx-файлы поместите в какую-то отдельную папку, где нет других docx-файлов. В эту же папку скопируйте файл ProcessPages.cmd.

Закройте все приложения MS Word. Двойным щелчком запустите файл ProcessPages.cmd на исполнение. Все файлы формата docx будут распечатаны на виртуальном принтере, что приведет к переводу их в графический формат.

Если файлов очень много, компьютеру может не хватить ресурсов для обработки их всех. В таком случае можно поместить в папку только часть docx-файлов, а после конвертации заменить их другими и снова запустить ProcessPages.cmd. Либо можно изменить в файле ProcessPages.cmd параметр set PauseAfter=0. Например, если поставить set PauseAfter=10, то процесс печати на виртуальном принтере будет останавливаться после печати каждых 10 файлов с выдачей сообщения «Для продолжения нажмите любую клавишу…».

5) Переименование  графических файлов (jpg, png, pdf) с помощью списка имен.

Если по каким-то причинам не удалось использовать способ 4, можно попробовать альтернативный способ. Для этого нужно напечатать на виртуальном принтере результат слияния (например, с именем «Сертификат-.docx») таким образом, чтобы   каждая страница попала в отдельный графический файл (jpg,png,pdf), а имя этого файла сформировалось добавлением номера страницы (т.е. страницы попали в файлы «Сертификат-1.jpg», «Сертификат-2.jpg», …).  Перейдите в окно с шаблоном («Сертификат-template.docx») и выполните макрос «ListOfPages», чтобы рядом с шаблоном и результатом слияния создался файл «Сертификат-.txt» с  пронумерованным списком значений.

Поместите все графические файлы («Сертификат-1.jpg», «Сертификат-2.jpg», …) и файл списка Сертификат-.txt в отдельную папку. В эту же папку скопируйте файл ProcessPages.cmd.

Перетащите мышью файл Сертификат-.txt  на файл ProcessPages.cmd. В результате будет создана подпапка OUT, в которую  будут помещены копии графических файлов с именами из списка Сертификат-.txt. Т.е. в папке OUT будут файлы «Сертификат-Иванова_Сергея.jpg», «Сертификат-Петровой_Марии.jpg», и т.п.

В том случае, если виртуальный принтер даёт имена создаваемым файлам с ведущими нулями, в колонтитуле можно использовать параметр «/zN», где N – количество  цифр в номере.  Например, для имен «Сертификат-001.jpg», «Сертификат-002.jpg», … нужно указать /z3. Параметр  /zN может использоваться с другими параметрами.

Рубрики: Цифровая дидактика

Один комментарий к “Макросы для обработки результатов слияния в MS Word

  1. Олег Валентинович говорит:

    Может быть проблема с разбиением на страницы, если рисунок оказался привязан к верхнему колонтитулу. Это можно увидеть, если включить показ невидимых символов и щелкнуть по рисунку (знак привязки отображается в виде якоря). Этот якорь не должен быть в верхнем колонтитуле, его нужно перетащить ниже, куда нибудь в текст страницы. Но если рисунок расположен в самом верху, то при изменении якорь опять может попасть в верхний колонтитул. Поэтому после перемещения рисунка нужно проверить, где находится якорь, и при необходимости его переместить. Либо можно закрепить привязку в параметрах рисунка.

Добавить комментарий

Ваш e-mail не будет опубликован.