Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用DocxTemplate填充docx表_Python_Docx_Templating - Fatal编程技术网

Python使用DocxTemplate填充docx表

Python使用DocxTemplate填充docx表,python,docx,templating,Python,Docx,Templating,我在pythondocx模板上阅读了这篇文档,但是我对表格部分感到非常困惑。假设我有一个名为template.docx的docx模板。在docx文件中,我有一个表,它的标题只有标题 如何使用python docx模板动态填充表(添加行和值)?通常,使用python docx模板可以解除jinja2的功能 填充单个变量 假设您创建了一个带有表的template.docx文件: **table 1** **table 2** {{some_content1}} {{so

我在
pythondocx模板上阅读了这篇文档,但是我对表格部分感到非常困惑。假设我有一个名为
template.docx
的docx模板。在docx文件中,我有一个表,它的标题只有标题


如何使用
python docx模板
动态填充表(添加行和值)?

通常,使用
python docx模板
可以解除
jinja2
的功能

填充单个变量

假设您创建了一个带有表的
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
,则还可以生成
上下文
字典。例如:

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

您还可以动态生成表,我想您可能不想这样做(如果您正在谈论在docx中指定“表头”)。不过,这是值得研究的。使用git测试中的示例:

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')

您知道表的大小吗?当我在docx中创建表时,我只为标题指定一行,但动态的是我添加到表中的行数。所以问题是,我不能创建单元格并在每个单元格中放置jinja标记,我需要动态创建行并向这些行添加值。你知道我怎么做吗?为什么不能用python指定头并使用动态格式呢@Roelant我想如果你想用某种方式来设计标题的样式,那么在模板中就更容易了。我发现很难使动态表示例适应正常的表用例