本帖最后由 poind 于 2024-4-25 12:55 编辑
一、背景
工作中有大量制作文书的需求,需要判断的条件也很多。每天现写,还是扣脑壳。
就考虑通过制作模板,传入指定参数的方式,生成对应文书,然后校对修改的方式减少工作量。
二、方案
目前有Office的邮件合并功能,docx2python,python-docx,docxtpl。这几种方法可以实现。
对比
邮件合并功能:需要创建“域”,在‘’域名‘’选中MergeField,然后以书名号《》作为区域;可以通过doc-mailmerge库来实现,操作多有点复杂。但可以避免文书的格式调整,也可以实现条件判断。
docx2python:挺方便,但是条件判断要额外写在代码中,也要扣点脑壳。最抠脑壳的还是文书的格式调整了。
python-docx:方便,条件判断方面同上。
docxtpl:内置了jinja2功能,支持在模板中预先内置一些条件,也可在代码中添加判断代码,进行增强。还可以避免令人头疼的文书格式调整问题。
这里使用docxtpl来解决需求,该模块可以加入条件判断,来满足工作中对于一些条件的判断,也可进行增强。
主要原因是,能够把主要精力放在模板的调整上,改动方便、直观,避免模板的逻辑漏洞,等工作量减少后再专门更新,提高生成质量。工作量太大,只能先假于物,后精于技。
三、思路
1.导入 docxtpl模板
pip install docxtpl
#后续通过Excel导入参数的时候,可以安装Excel相关库
2.写入代码
from docxtpl import DocxTemplate
#模板保存地址
path = 'C:/Users/PycharmProjects/pythonProject1/Find_Word.docx'
#指定保存文档
PATH = 'C:/Users/PycharmProjects/pythonProject1/'
参数字典
data_dic = {
'被告名称':'张三',
'被告生日':'1999年9月9日',
'民族':'汉族',
'住址':'安徽省南京市',
'年利率':'11',
'age':98,
'S':98,
'T':98,
'Y':98,
}
#导入模板地址
doc = DocxTemplate(path)
# 参数字典内容加载到模板中
doc.render(data_dic)
#保存到指定文件夹,附加文档名称
doc.save(PATH + 'Watch.docx')
接下来是Word模板的设置了:
在Word模板中 以花括号包裹的,就是可以被传入的参数替换的内容了
代{过}{滤}理人系:{{代{过}{滤}理人单位}}员工
在参数字典中给“代{过}{滤}理人单位”传入参数:
“代{过}{滤}理人单位:北京市东交民巷”
那么在运行之后:
Word显示为:
代{过}{滤}理人系:北京市东郊民巷员工
颜色也是能够对应的。
模板代码(插入Word模板中):
原告惶惶然银行
{%- if ages -%}
与被告{{被告名称}}
{%- elif 住址 -%}
被告所在地{{住址}}
{%- else -%}
立案后适用小额诉讼程序
{%- endif -%}
,公开开庭进行了审理
Word模板显示:
模板中设置的条件
若代码中传入{{住址}}的值
生成文书显示:
文书中显示结果
参数字典可以通过读取Excel传入,减少更新参数的工作量
|