该代码实现将XML文件读入并转换为字典格式dict,并将数据按照DOC模板格式输出。
代码如下:
from docxtpl import DocxTemplate, RichText
import xmltodict
import datetime
# 格式化日期格式并计算出年龄,返回字典
def gsh_sj(name,key):
name = name
key = key
name1 = name.get(key)[:4]+"."+name.get(key)[4:]
name[key] = name1
return name
# 计算字符串时间年龄
def js_age(name):
now = datetime.datetime.now()
year = int(str(now.year))
month = int(str(now.month))
# print(year,month)
if month >= int(name[4:]):
age = year - int(name[:4]) + 1
else:
age = year - int(name[:4])
return age
# 将指定的xml文件读入并使用xmltodict转化为字典格式
with open('./biao/段***.lrmx', 'r', encoding = 'UTF-8') as fd:
doc = xmltodict.parse(fd.read())
# 初始化模板对象
tpl = DocxTemplate("./表A4.docx")
# 待填充的字典数据
context = doc.get('Person')
# 加入年龄字典
age = js_age(context.get('ChuShengNianYue')) #计算年龄
context.update({"age": age}) #把年龄加入到字典中
# 规范时间、年龄等数据
context = gsh_sj(context,'ChuShengNianYue')
context = gsh_sj(context,'RuDangShiJian')
context = gsh_sj(context,'CanJiaGongZuoShiJian')
# 进行模板替换
tpl.render(context=context)
# 输出文件到指定文件
tpl.save("示例结果文档.docx")
# print(context.get('ZhaoPian'))
表A4大概如下图:
示例结果文档.docx如下: