#python #ms-word #python-docx
Вопрос:
Я использую docxtpl
модуль для создания нескольких документов с данными, которые у меня есть. Мои данные хранятся в виде списка словарей. Я написал for
цикл для этого, но на каждой итерации мой for
цикл генерирует документ docx с информацией из первого словаря! У тебя есть какие-нибудь идеи, как я могу это исправить?
Я оставляю здесь образец кода на Python, чтобы дать лучший обзор проблемы!
from docxtpl import DocxTemplate from docx2pdf import convert doc = DocxTemplate('Hello.docx') list = [{'name': 'John'}, {'name': 'Amin'}, {'name': 'Carl'}] for i in range(3): doc.render(list[i]) doc.save('test' str(i) '.docx')
Мой docx так же прост, как:
Hello my name is {{ name }}
Я хочу создать 3 разных документа Word с именами Джон, Амин и Карл.
Ответ №1:
Ваш цикл for немного испорчен. И переменная list
защищена, поэтому вам следует переименовать список:
list_of_names = [{'name': 'John'}, {'name': 'Amin'}, {'name': 'Carl'}]
Вместо этого я бы прошелся по самому списку и получил доступ к значениям прямо оттуда.
for item in list_of_names: doc.render(item) doc.save(f"test{item['name']}.docx")
Я не уверен, но вам, возможно, потребуется открывать документ шаблона с каждой итерацией. В этом случае код должен выглядеть следующим образом:
for item in list_of_names: doc = DocxTemplate('Hello.docx') doc.render(item) doc.save(f"test{item['name']}.docx")
Пожалуйста, дайте мне знать, работает ли это так, как ожидалось 🙂
Комментарии:
1. замечательно! это сработало! Большое вам спасибо, правда! это было спасением жизни 🙂