Размножаем документы
.
В предыдущем посте было рассмотрено как заполнить запрос в word с помощью python. В этот раз будет продемонстрировано как заполнить сразу несколько word документов данными из таблицы excel.
Перед тем как работать с программой, нам необходимо подготовить файл excel, где будут содержаться исходные данные. Создадим файл excel с такими данными или используем готовый:

Теперь обратимся к программе.
Так как мы должны считать 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')
Теперь сохраненный файл будет иметь название компании-отправителя запроса.
При исполнении программы может возникнуть ошибка:

Эта ошибка связана с тем, что в наименовании компании содержатся кавычки. Если из таблицы 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 – здесь.
ссылка на оригинал статьи https://habr.com/ru/post/459152/
Добавить комментарий