暂无图片
暂无图片
暂无图片
暂无图片
1
暂无图片

Python docxtpl 操作 Word 模板文档

原创 张玉龙 2021-11-12
4453

模板标签主要来自jinja2,可以了解其语法:
http://docs.jinkan.org/docs/jinja2/templates.html
docxtpl英文手册:
https://docxtpl.readthedocs.io/en/latest/#jinja2-like-syntax

填充 Word 中的变量

  • 准备模板docx文档
    image.png
  • Python 代码示例
from docxtpl import DocxTemplate, RichText # 初始化模板对象 tpl = DocxTemplate("./temp.docx") # 待填充的字典数据,其中key对应word模板中的填充名 context = { "日期": '2021-10-01', "作者": '张玉龙', } # 开始渲染context数据到模板文件中 tpl.render(context=context) tpl.save("示例结果文档.docx")
复制
  • 效果展示
    image.png

填充 Word 中的表格案例一

  • 准备模板docx文档
    image.png
  • Python 代码示例,RichText(富文本)改变文字样式
from docxtpl import DocxTemplate, RichText # 初始化模板对象 tpl = DocxTemplate("./temp.docx") # 待填充的字典数据,其中key对应word模板中的填充名 context = { "table": [{"app_level": 'A类', "app": "营业", "db_name": "YY", "db_type": "PDB", "run": RichText('READ ONLY', color='FF0000', size=16, ), }, {"app_level": 'B类', "app": "账务", "db_name": "ZW", "db_type": "PDB", "run": RichText('READ WRITE', color='000000', size=16, ), }, {"app_level": 'C类', "app": "报表", "db_name": "BB", "db_type": "PDB", "run": RichText('MOUNTED', color='FF0000', size=16, ), }, {"app_level": 'D类', "app": "计费", "db_name": "JF", "db_type": "PDB", "run": RichText('READ WRITE', color='000000', size=16, ), }, ], } # 开始渲染context数据到模板文件中 tpl.render(context=context) tpl.save("示例结果文档.docx")
复制
  • 效果展示
    image.png

填充 Word 中的表格案例二

  • 准备模板docx文档,loop.index 自动生成序列号
    image.png
  • Python 代码示例,根据给定的列表生成填充模板所需要的字典数据,代码自己学习写的,能力有限,仅做参考
from docxtpl import DocxTemplate, RichText # 初始化模板对象 tpl = DocxTemplate("./temp.docx") # 定义字典 context 填充渲染模板的数据 context = {} # 巡检脚本生成的事件列表 events = [['/oracle目录使用率超过90%', '操作系统配置', '4.2', '尽快处理'], ['表空间XXX使用率超过90%', '数据库配置', '5.7', '尽快处理'], ['资源ora.scan1.vip状态为OFFLINE', '集群配置', '6.1', '尽快处理'], ['磁盘组XXX使用率超过90%', 'ASM配置', '8.1', '尽快处理'], ['存在已知比特币勒索对象', '数据库风险评估', '9.4', '尽快处理'], ['存在无效索引', '数据库对象信息', '10.2', ''], ['XXX SQL 执行效率低', '数据库性能评估', '11.2', ''], ['无RMAN物理备份', '数据库备份评估', '12.1', ''], ] # 定义一个临时字典和列表 tmp_aa = {} tmp_bb= [] # 待填充的字典数据,其中key对应word模板中的填充名 for event_row in events: tmp_aa["desc"] = event_row[0] tmp_aa["type"] = event_row[1] tmp_aa["chap"] = event_row[2] if event_row[3] == "尽快处理": tmp_aa["time"] = RichText(event_row[3], color='FF0000', size=16, ) else: tmp_aa["time"] = RichText(event_row[3], color='000000', size=16, ) tmp_bb.append(tmp_aa) tmp_aa = {} context["event_table"] = tmp_bb # 开始渲染context数据到模板文件中 tpl.render(context=context) tpl.save("示例结果文档.docx")
复制
  • 效果展示
    image.png

---------未完待续

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

墨天轮福利君
暂无图片
3年前
评论
暂无图片 0
您好,您的文章已入选合格奖,10墨值奖励已经到账请查收! ❤️我们还会实时派发您的流量收益。
3年前
暂无图片 点赞
评论