首页 > 解决方案 > 使用 docxtpl 生成多列表

问题描述

我有一系列数据(在二维列表“CombinedTable”中)我需要用来在 MS Word 模板中填充表格。该表有 7 列,所以我尝试使用 docxtpl 模块进行以下操作:

context = {
    'tpl_modules1': CombinedTable[0]
    'tpl_modules2': CombinedTable[2]
    'tpl_modules3': CombinedTable[4]
    'tpl_modules4': CombinedTable[6]
    'tpl_modules5': CombinedTable[8]
    'tpl_modules6': CombinedTable[10]
    'tpl_modules7': CombinedTable[12]
}
tpl.render(context)

tpl.save(FilePath + FileName)

这不是我所知道的最优雅的解决方案,但我只是想让它工作 - 不幸的是,将此代码与以下模板一起使用会导致 tpl_modules7 数据被写入所有列,而不仅仅是第 7 列。

word模板图片

有人对如何解决这个问题有建议吗?我试图通过列和行创建一个 for 循环,但没有成功将任何内容写入文档(保存为空白和空文档)。

CombinedTable 变量是一个包含 12 个列表的列表(模板中的每一列都有一个,尽管只有 7 个包含数据)。这 12 个列表中的每一个都包含另一个列表,其中包含单元格数据,其长度等于要写入该列中表的行数。这意味着每列写入的行数不同。

编辑:更仔细地查看docs,它指出我不能%tr在同一行中多次使用。我假设我将不得不使用循环%tc%tr(我尝试过并且无法正常工作)。关于如何实现这一点的任何建议?特别是在word文档的一边。谢谢!

标签: python-3.xms-word

解决方案


我能够根据我的要求令人满意地解决这个问题,但是我的解决方案可能并不适合所有人。我只是在一个包含 7 列的文档中设置了 7 个不同的表格,并调整了边距/边框以适应表格所需的尺寸。7 个表中的每一个都具有与我的问题中的图像相同的 docxtpl 语法,它们之间的小缓冲区列被 word 文档中的列替换。


推荐阅读