Формирование документов WORD из списков python
Есть 2 списка
['2021-04-30', '2021-05-02', '2021-05-04', '2021-05-06']
[1500, 450, 750, 900]
Код:
doc = DocxTemplate('Шаблон.docx')
context = {'expirationdate': date, 'price': price, 'finalprice': pricesum}
doc.render(context)
doc.save('restyled.docx')
Как мне получить такой документ?

Пробую вот так
х=0
while х<len(date):
doc = DocxTemplate('Шаблон.docx')
context = {'expirationdate': date[х], 'price': price[х], 'finalprice': pricesum}
doc.render(context)
doc.save('restyled.docx')
Но тогда получаю только первый элемент списка и только одну строку

Ответы (1 шт):
Автор решения: insolor
→ Ссылка
На основе второй части ("Dynamic table") вот этого ответа: https://stackoverflow.com/a/54983642/4752653 (код там взят из одного из тестов к python-docx-template)
Шаблон делаем такого вида:
Строки таблицы, обрамленные в tr for/tr endfor, будут дублироваться столько раз, сколько элементов в списке по ключу 'tbl_contents'. Для дублирования колонок нужно использовать tc for/tc endfor вместо tr for/tr endfor (как в примере в данном шаблоне).
Код заполнения:
from docxtpl import DocxTemplate
doc = DocxTemplate('template.docx')
dates = ['2021-04-30', '2021-05-02', '2021-05-04', '2021-05-06']
prices = [1500, 450, 750, 900]
# Формируем список вида
# [{'expirationdate': '2021-04-30', 'price': 1500},
# {'expirationdate': '2021-05-02', 'price': 450}, ...]
tbl_contents = [{'expirationdate': expirationdate, 'price': price}
for expirationdate, price in zip(dates, prices)]
context = {
'tbl_contents': tbl_contents,
'finalprice': sum(prices)
}
doc.render(context)
doc.save('result.docx')



