打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Flask后端实践 连载十四 Flask输出Word报表

tips:

  • 简单实现Flask输出Word报表
  • 本文基于python3编写
  • 代码仓库

项目场景

由于项目是工程上的使用,不仅需要对采集的数据进行分析,也需要输出报表,使用程序输出报表极大的简化了报表制作流程。

Python处理Word的包

  1. python-docx

    python-docx是一个用于创建和更新Microsoft Word(.docx)文件的Python库。文档地址

  2. docxtpl

    主要包含两个包,分别是python-docx用于读取,编写和创建子文档。jinja2用于管理插入模板docx的标签。通过预先设定的模板文件,生成需要的文件。文档地址

docxtpl的简单使用

项目上的Word报表定制化比较高。通常由用户提供模板,我们这边只需要在对应位置填写数据。因此项目上采用docxtpl来定制化Word报表

  1. 安装pip install docxtpl

  2. 简单使用,更多详细内容请看官方文档

    • 新建测试模板test.docx,设置模板样子,并填入相关参数。

    • 编写渲染测试代码test.py

      from docxtpl import DocxTemplate, InlineImagefrom docx.shared import Mm# 读取指定位置的模板文件doc = DocxTemplate("test.docx")# 渲染的内容context = {    # 标题    'title': "人员信息",    # 表格    'table': [        {"name": "小李", "age": 11},        {"name": "小张", "age": 21},        {"name": "小张", "age": 20},        {"name": "小张1", "age": 10},        {"name": "小张2", "age": 30},        {"name": "小张3", "age": 40},    ],    # 页眉    'header': 'xxx公司人员信息管理',    # 页脚    'footer': '1',    # 图片    'image': InlineImage(doc, 'test.jpg', height=Mm(10)),}# 渲染模板doc.render(context)# 保存渲染的文件doc.save("generated_doc.docx")
  3. 关于表格动态合并、表格设置可以参考这里

Flask结合docxtpl使用

  • 测试代码

    from docxtpl import DocxTemplate, InlineImagefrom docx.shared import Mmfrom flask import Flaskdef write():    path = "generated_doc.docx"    # 读取指定位置的模板文件    doc = DocxTemplate("test.docx")    # 渲染的内容    context = {        # 标题        'title': "人员信息",        # 表格        'table': [            {"name": "小李", "age": 11},            {"name": "小张", "age": 21},            {"name": "小张", "age": 20},            {"name": "小张1", "age": 10},            {"name": "小张2", "age": 30},            {"name": "小张3", "age": 40},        ],        # 页眉        'header': 'xxx公司人员信息管理',        # 页脚        'footer': '1',        # 图片        'image': InlineImage(doc, 'test.jpg', height=Mm(10)),    }    # 渲染模板    doc.render(context)    # 保存渲染的文件    doc.save(path)    return pathapp = Flask(__name__)@app.route('/testWord', methods=["GET"])def test_word():    """    测试输出word    :return:    """    path = write()    return pathif __name__ == '__main__':    app.run()
  • 启动app,访问http://127.0.0.1:5000/testWord 返回生成路径generated_doc.docx。然后配合nginx转发即可下载文件

总结

  • 本篇文章简单介绍了docxtpl的使用,具体的使用场景应该与项目需求相结合。
  • 下一篇将解决自关联无限层级生成目录树的问题
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
用Python根据模板批量生成含指定数据的word文档(使用docxtpl)
python-docxtpl妙用:论文神器,excel习题集自动转换成word文档格式!
效率成倍提升!使用 Python 来处理 Word/Excel 文档
docxtpl实战案例-审计脚注表格回填
用python帮你生产指定内容的word文档
如何把docx转换成doc
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服