Python заполнить таблицу docx с помощью DocxTemplate - PullRequest
0 голосов
/ 28 февраля 2019

Я прочитал эту документацию по python-docx-template, но я довольно запутался в разделе таблицы.Допустим, у меня есть шаблон документа под названием Template.docx.Внутри файла docx у меня есть таблица, в которой заголовок имеет только заголовок.

Как я могу использовать python-docx-template для динамического заполнения таблицы (добавления строк и значений)?

1 Ответ

0 голосов
/ 04 марта 2019

В общем, вы отпускаете власть jinja2 с python-docx-template.

Заполнение отдельных переменных

Представьте, что вы создаете файл template.docx с таблицей:

**table 1**           **table 2**
{{some_content1}}      {{some_content2}}

Затем вы можете заполнить его, используя

from docxtpl import DocxTemplate
import jinja2

doc = DocxTemplate("template.docx")
context = { 'some_content1' : "test", "some_content_2": "other"}  # Where the magic happens
doc.render(context)
doc.save("generated_doc.docx")

Если у вас есть данные, доступные как pd.DataFrame, вы также можете создать словарь context.Например:

import itertools 
context = {}
for row, col in itertools.product(df.index, df.columns):
    context[f'{row}_{col}'] = df.loc[row, col]

Динамическая таблица

Вы также можете генерировать таблицы динамически, что, я полагаю, вы, возможно, не хотите делать (если вы говорите оуказав "заголовки таблицы" в docx).Это стоит посмотреть, хотя.Используйте этот шаблон с этим примером из git tests:

from docxtpl import DocxTemplate
tpl = DocxTemplate('templates/dynamic_table_tpl.docx')

context = {
'col_labels' : ['fruit', 'vegetable', 'stone', 'thing'],
'tbl_contents': [
    {'label': 'yellow', 'cols': ['banana', 'capsicum', 'pyrite', 'taxi']},
    {'label': 'red', 'cols': ['apple', 'tomato', 'cinnabar', 'doubledecker']},
    {'label': 'green', 'cols': ['guava', 'cucumber', 'aventurine', 'card']},
    ]
}

tpl.render(context)
tpl.save('output/dynamic_table.docx')
...