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 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的使用,具体的使用场景应该与项目需求相结合。
  • 下一篇将解决自关联无限层级生成目录树的问题

Flask后端实践 连载十四 Flask输出Word报表相关推荐

  1. Flask后端实践 连载十八 Flask输出PDF报表

    Flask后端实践 连载十八 Flask输出PDF报表 tips: 简单实现Flask输出PDF报表 本文基于python3编写 代码仓库 项目场景 由于项目是工程上的使用,不仅需要对采集的数据进行分 ...

  2. Flask后端实践 连载十六 Flask实现微信Web端及APP端登录注册

    Flask后端实践 连载十六 Flask实现微信Web端及APP端登录注册 tips: 本文将实现微信Web端和APP端登陆注册 本文基于python3编写 代码仓库 项目场景 某天,项目经理说,项目 ...

  3. Flask后端实践 连载十三 Flask输出Excel报表

    Flask后端实践 连载十三 Flask输出Excel报表 tips: 简单实现Flask输出Excel报表 本文基于python3编写 代码仓库 项目场景 由于项目是工程上的使用,不仅需要对采集的数 ...

  4. Xamarin.Android开发实践(十四)

    原文:Xamarin.Android开发实践(十四) Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xama ...

  5. 单反相机的传奇—佳能单反50年辉煌之路(连载十四)

    连载十四:M3--徕卡的震撼 引言:1954年4月在联邦德国科隆举办的国际摄影器材展上,徕卡M3发布,一举震撼了整个世界,让那些因为战争的缘故得以照抄徕卡的相机制造工厂目瞪口呆,M3作为德国相机的代表 ...

  6. 《linux核心应用命令速查》连载十四:fuser:用文件或者套接口表示进程

    fuser:用文件或者套接口表示进程 作用:fuser命令用文件或者套接口表示进程. 用法:fuser [-a | -s | -c] [-4 | -6] [-n space] [-k [-i] [-s ...

  7. cc2530定时器和捕获比较_ALIENTEK 阿波罗 STM32F767 开发板资料连载十四章 输入捕获实验...

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 http://weixi ...

  8. Flask后端开发(二) - Flask的练习(入门)

    建议食用官方文档:Welcome to Flask - Flask Documentation (2.1.x)https://flask.palletsprojects.com/ 前言:避免文章篇幅过 ...

  9. stm32f767串口下载软件_ALIENTEK 阿波罗 STM32F767 开发板资料连载十四章 输入捕获实验...

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第十四章 输入捕获实验 ...

最新文章

  1. 9.path Sum III(路径和 III)
  2. mac的mysql数据库管理_Mac使用MySQL Workbench管理MySQL数据库
  3. # 2017-2018-1 20155224 《信息安全系统设计基础》第九周学习总结
  4. STM32(Cortex-M3)开发,RVDS和MDK谁优谁劣?
  5. 操作系统(二十一)信号量机制
  6. 【资源】机器学习资料包来袭
  7. hibernate dynamic-update=true属性不起作用原因(转载)
  8. 汉字字符编码的科普笔记(GB2312汉字编码,Unicode与UTF-8,字符映射表,vim,文泉驿,正则表达式)
  9. Windows7自带截图工具无法保存图片的修复办法
  10. 理论+实验:Apache网页与安全优化(网页压缩、网页缓存、隐藏版本信息、网页图片防盗链)
  11. java图片合成_Java图片处理(一)图片合成
  12. 1GB等于2的多少次方
  13. 2021年计算机软考时间公布啦
  14. matlab仿真动画,MATLAB图形及三维动画仿真设计.ppt
  15. 软件工程之QA管理(好软件系列二)
  16. 【Android界面实现】Starting an Activity(Activity生命周期金字塔模型)
  17. 什么是人工智能技术?
  18. hangfire使用笔记
  19. 严格递增和非严格递增最长递增子序列长度
  20. 【ORACLE】详解oracle数据库UTL_RAW包各个函数的模拟算法

热门文章

  1. 初识Top4“不安全设计”以及Top5“安全配置错误”
  2. Deep Facial Expression Recognition: A Survey 笔记
  3. 微信小程序开发文档(4)
  4. 用java语言编写的程序计算机能直接执行_计算机的编程语言(上)
  5. 敏捷悖论之:站会的三种状态
  6. GSM/GPRS模组SIM800C
  7. less与sass的区别是什么?
  8. 基础(网络知识 二)——OSI七层与TCP/IP四/五层网络架构
  9. 帕金森病患者起居生活需要注意什么
  10. 联合国世界卫生组织(WHO)对健康的定义