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

发布时间: 2020-05-23 更新时间: 2021-11-28

Flask后端实践 Flask,Python,Word 4.10 K 3 分钟 174

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, InlineImage from 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, InlineImage from docx.shared import Mm from flask import Flask def 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 path app = Flask(__name__) @app.route('/testWord', methods=["GET"]) def test_word(): """ 测试输出word :return: """ path = write() return path if __name__ == '__main__': app.run()
  • 启动app,访问http://127.0.0.1:5000/testWord 返回生成路径generated_doc.docx。然后配合nginx转发即可下载文件

总结

  • 本篇文章简单介绍了docxtpl的使用,具体的使用场景应该与项目需求相结合。
  • 下一篇将解决自关联无限层级生成目录树的问题
end
如果你觉得还不错的话,请我吃个午饭吧!😍
支付宝
支付宝
微信
微信
目录

Copyright © 2019-2020 qzq版权所有

蜀ICP备19012274号-1 | 管理