Архив метки: word

Кроссплатформенный способ формирования документов Word с помощью python

В данной публикации будет рассказано как сделать кроссплатформенный шаблон 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 c изменяемым полем

Когда шаблон сформируете, сохраните его, например 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 и избавит вас от рутины.