В данной публикации будет рассказано как сделать кроссплатформенный шаблон Microsoft Word и в дальнейшем использовать его для генерации документов на python 3.
История такова — что каждый месяц мне надо было отправлять фактически один и тот же документ, но в котором изменены несколько полей. Подправить документ — дело в общем-то не хитрое и алгоритм прост. Сначала ищем за предыдущий месяц, открываем и ждем пока word загрузится, изменяем нужные цифры и слова вручную, изменяем, закрываем и отправляем. Но вот это меня и напрягло — ведь всё можно автоматизировать и не тратить каждый раз по 5 минут, включая отправку. Кстати про отправление писем я уже писал в статье об python и outlook .
Достаточно быстро нашлась библиотека python3 docx-mailmerge . При установке не спутайте с mailmerge, они импортируются одинаково, но нет объекта MailMerge
Создаем шаблон в документе docx, обратите внимание, что документ должен быть именно docx. (Да, шаблони придется сделать на windows, но саму генерацию можно делать уже на linux.)
В то место, где надо вставить изменяемый текст кликаем курсором, после этого идем во Insert далее Quick Parts далее Field. Выскочит окно, в нем слева выбираем MergeField и в название пишем наименование изменяемого поля, например substitution_1 . Подробнее показано на рискунке
Когда шаблон сформируете, сохраните его, например word_tpl.docx
Приступаем к кодированию, собственно минимальный код представлен ниже
from mailmerge import MailMerge # указываем путь до шаблона template = r"/path/to/template/word_tpl.docx" # создаем объект и смотрим на имеющиемся поля document = MailMerge(template) print(document.get_merge_fields()) document.merge( substitution_1='Проверка генерирации документов с русским текстом', substitution_2='Работает' ) document.write('generated_word_with_python.docx')
с помощью функции get_merge_fields можно посмотреть список имеющихся подстановок. Если вы его не видите, то что-то сделано не так, пересоздайте docx документ.
Таким образом такой простой код на python поможет генерировать однотипные документы word и избавит вас от рутины.