我如何使用python的docxtpl包生成多个docx文件,从而保留docx格式?

问题描述 投票:1回答:1

我正在努力自动生成候选人的录取通知书。候选人信息在Excel中,包含生成录取通知书所需的标准信息,例如候选人姓名,加入日期,位置,职务,CTC等。

是否有一种方法可以在保留docx模板格式的同时生成多个录用通知书(输出文件名_.docx)?

利用Stackoverflow的帮助,我能够利用python-docx软件包并生成多个录取通知书。因此,这种方法会从录取通知书中剥离所有格式。

import os
from pandas import *
import datetime
from docxtpl import DocxTemplate

doc = DocxTemplate("\\template\\offer_letter_template.docx")
xls = ExcelFile("\\data\\candidate_data.xlsx")
df = xls.parse(xls.sheet_names[0])
print (df.to_json(orient='records'))
Output:
[{"offer_letter_date":"July 27, 2019","candidate_name":"John Wick","candidate_email":"[email protected]","candidate_location":"NYC","candidate_job_title":"Business Development Executive","candidate_ctc":283000},{"offer_letter_date":"July 17, 2019","candidate_name":"Jane Doe","candidate_email":"[email protected]","candidate_location":"NYC","candidate_job_title":"Business Development Executive","candidate_ctc":290000}]
context = df.to_json(orient='records')
doc.render(context)

我正在努力围绕context创建一个循环,以便将候选信息保存在各个文件中,而不是一个文件本身。有人可以帮忙吗?

Jinja2 for word templating确实很有帮助,但我无法通过循环复制它。

python jinja2 docx template-engine python-docx
1个回答
0
投票

可以创建多个docx文件,不幸的是,在docxtpl文档中没有人说一旦加载模板,替换就在原位完成,从而防止了任何其他上下文替换。

您可能希望的解决方法是在每次迭代时重新打开文件。

类似:

context=df.to_json(orient='records')
for i in len(context):
    doc = DocxTemplate("\\template\\offer_letter_template.docx")
    template.render(context[i])
    template.save("docs-folder\\%s%(context[i][candidate_name]))

^可能需要修改,但是您明白了。

© www.soinside.com 2019 - 2024. All rights reserved.