繁体   English   中英

使用 python-docx 填充单词表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM