[英]Populate word table using python-docx
我有一个表格来填充表格来填充,我对 python-docx 很陌生。 我尝试使用渲染填充它,但它只提供 output 一台服务器:
for i in serverJson:
doc.render(i)
其中 serverJson 是用户输入的服务器列表。 例如:
for i in appserver:
server_1={"component":"Tomcat","comp_version":"7","server":i,
"app_port":"5000","db_sid":" ","db_port":"200"}
server_2={"component":"Apache","comp_version": "2.4","server":i,
"app_port":" ","db_sid":" ","db_port":"200"}
serverJson.append(server_1)
serverJson.append(server_2)
我的问题是如何使用用户输入的服务器数量填充链接中显示的表格?
所以,你实际上在用这个代码块做什么:
for i in serverJson:
doc.render(i)
是多次渲染同一个文档,但只使用您提供的单个变量。 相反,您需要在块本身内提供一个 jinja for
语句,以允许它动态创建行和列。 您将必须对您的docx
文件和 Python 代码进行操作。 首先,创建一个表并使您的docx
文件如下所示:
上面,我们使用一些 jinja2 for loops
来实现以下功能:
为了使用正确的上下文填充上述模板,请查看以下代码:
from docxtpl import DocxTemplate
import os,sys
#Just change these according to your needs
inputFileName = "i.docx"
outputFileName = "o.docx"
#This is done to obtain the absolute paths to the input and output documents,
#because it is more reliable than using the relative path
basedir = os.path.dirname(sys.argv[0])
path = os.path.join(basedir, "", inputFileName)
outpath = os.path.join(basedir, "", outputFileName)
template = DocxTemplate(path)
#Specify all your headers in the headers column
context = {
'headers' : ['Component', 'Component Version', 'Server FQDN', 'Application port', 'DB SID', 'DB Port', 'Infos'],
'servers': []
}
#Fictious appserver list
appserver = ['a','b']
#Add data to servers 1 and 2 using a list and not a dict, remember to add
#an empty string for the Infos, as well, otherwise the border won't be drawn
for i in appserver:
server_1= ["Tomcat",7,i,5000," ",200,""]
server_2= ["Apache",2.4,i," "," ",200,""]
context['servers'].append(server_1)
context['servers'].append(server_2)
template.render(context)
template.save(outpath)
以上,将生成o.docx
,如下所示:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.