Как стать автором
Обновить

Заполняем документы в Microsoft Word при помощи Python. Часть 2

Время на прочтение 2 мин
Количество просмотров 21K

Размножаем документы

.
В предыдущем посте было рассмотрено как заполнить запрос в word с помощью python. В этот раз будет продемонстрировано как заполнить сразу несколько word документов данными из таблицы excel.

Перед тем как работать с программой, нам необходимо подготовить файл excel, где будут содержаться исходные данные. Создадим файл excel с такими данными или используем готовый:

image

Теперь обратимся к программе.

Так как мы должны считать excel файл, необходимо импортировать соответствующий модуль:

import openpyxl

Далее, нам надо пройти по таблице и считать все данные построчно. Это будет выглядеть вот так:

test=[]
wb = openpyxl.load_workbook('zaprosi.xlsx')
sheet=wb.get_active_sheet()

for row in sheet['B3':'F7']:
    for cellObj in row:
        if cellObj.value==None or cellObj.value==" ":
            continue
        #print(cellObj.value)
        test.append(cellObj.value)

Мы создали пустой список, куда в дальнейшем добавляем значения из таблицы. Добавление происходит только, если в ячейке есть какие-то записи (не пустота).

После проделанных манипуляций, внесем собранные данные в шаблон word:

doc = DocxTemplate("шаблон.docx")
    context = { 'emitent' : test[0],'address1' : test[1],'участник' : test[2],'адрес_участника' : test[3],'director' : test[4] }
    doc.render(context)
    doc.save('шаблон-final.docx')

В итоге у нас будет готовый файл word с данными из таблицы. Только вот он один, да и называется шаблон-final. Как потом отличить документы друг от друга?

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

doc.save(test[x]+'.docx') 

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

При исполнении программы может возникнуть ошибка:

image

Эта ошибка связана с тем, что в наименовании компании содержатся кавычки. Если из таблицы excel удалить кавычки, то файл word успешно сохранится с именем Компания-1.docx.

Осталось «размножить» документ, введя остальные данные из таблицы.

Здесь тоже все просто. Создаем цикл по нашим собранным данным:

x=0
while x<len(test):
    doc = DocxTemplate("шаблон.docx")
    context = { 'emitent' : test[x],'address1' : test[x+1],'участник' : test[x+2],'адрес_участника' : test[x+3],'director' : test[x+4] }
    doc.render(context)
    doc.save(test[x]+'.docx')    
    x+=5

В конце цикла «перепрыгиваем» на название столбца с именем компании, чтобы файл word сохранился с правильным наименованием.

Программа готова! Осталось только создать таблицу excel с компаниями, которые находятся на обслуживании.

Скачать готовую программу – здесь.

Скачать таблицу excel с тестовыми данными – здесь.

Шаблон документа word – здесь.

---Update--- 08.11.2019

.
Добавлено:
— word-шаблон ответа по бенефициару;
— word-шаблон запроса расширен по количеству полей (должность директора);
— теперь в таблицу можно забивать названия компаний с кавычками,
программа переварит;
— при сохранении выходных файлов запросов программа сохраняет «красиво»: компания-директор, что добавляет наглядности при работе с большим количеством файлов;
— при сохранении выходных файлов ответов программа сохраняет: участник-директор-кому ответили (т.к. обычно участник может отвечать сразу нескольким компаниям и названия файлов дублируются).

Скачать программу запроса по бенефициару — здесь
Скачать программу по ответам — здесь
Скачать таблицу excel с тестовыми данными — здесь
Word-шаблон запросов по бенефициару — здесь
Word-шаблон ответов — здесь
Теги:
Хабы:
+8
Комментарии 5
Комментарии Комментарии 5

Публикации

Истории

Работа

Data Scientist
62 вакансии
Python разработчик
134 вакансии

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн