【Python】python使用docxtpl生成word模板
python使用docxtpl生成word模板
python-docxtpl包简单使用和实战,Python处理word,docx文件。
最近需要处理一些爬虫得到的数据来进行一些自动化报告的操作,因为需要生成的是word的报告,所以估选用docxtpl库来直接生成模板
docxtpl 模板标签主要来自jinja2,可以了解 jinja2语法,也有些额外的不一样,可以自行百度或者参考官方文档
开始
使用Pip安装docxtpl
pip install docxtpl
简单demo
根据官网的简单举例:
from docxtpl import DocxTemplate
doc = DocxTemplate(“my_word_template.docx”) # 读取模板
context = { ‘company_name’ : “World company” } # 需要传入的字典, 需要在word对应的位置输入 {{ company_name }}
doc.render(context) # 渲染到模板中
doc.save(“generated_doc.docx”) # 生成一个新的模板
至此,就可以直接拿来实战了, 实战中包含了图片的替换和表格文本的一些插入。都是很简单的,就是将组成的字典渲染到word中去就可以
实战
#!/usr/bin/env python
-- encoding: utf-8 --
‘’’
@File : generate_word.py
@Time : 2021/05/28 15:52:57
@Author : OD
@Version : 1.0
‘’’
here put the import lib
from docx import Document
from docx.shared import Pt
import datetime
from docxtpl import DocxTemplate, RichText, InlineImage
from docx.shared import Mm
import json
根据模板生成一个周报内容
class Generate2Word:
def init(self):
self.now = str(datetime.date.today() - datetime.timedelta(days=0)).replace(“-”, “”).replace(" “, “”)
self.last = str(datetime.date.today() - datetime.timedelta(days=7)).replace(”-“, “”).replace(” “, “”)
self.now = self.now[4:6] + ‘.’ + self.now[6:] # 现在时间
self.last = self.last[4:6] + ‘.’ + self.last[6:] # 7天前时间
def generate_report(self, tpl_file, report_file):
tpl= DocxTemplate(tpl_file)
# 第一个图表
context = {
‘start_time’ : self.last,
‘end_time’ : self.now,
‘total_attention’: 123,
‘add_attention’: 20,
‘dau’: 100,
‘dau_per’:20 / 100,
‘theme_tiezi’:1234,
‘all_tiezi’: 12345,
‘add_theme_tiezi’: 25,
‘add_tiezi’: 20,
‘official_pub’:12,
‘del_tiezi’: 5,
}
image1_path = r’1.png’ # 要生成的图片地址
image2_path = r’2.png’ # 要生成的图片地址
insert_image1 = InlineImage(tpl, image1_path, width=Mm(140))
insert_image2 = InlineImage(tpl, image2_path, width=Mm(140))
# 作为图片的替换
img_context = {
‘img1’: insert_image1,
‘img2’: insert_image2
}
# 管理帖子,需要渲染
bawu_lists = {
“bawu_table”:
[{
‘publish_time’: ‘2021/5/7’,
‘title’: ‘测试1’,
‘link’: 'https://www.baidu,com,
‘reply_num’: 27
},
{
‘publish_time’: ‘2021/5/8’,
‘title’: ‘测试2’,
‘link’: ‘https://www.baidu,com’,
‘reply_num’: 4
},
{
‘publish_time’: ‘2021/5/31’,
‘title’: ‘湖人浓眉伤退’,
‘link’: ‘https://www.baidu,com’,
‘reply_num’: 40
},
{
‘publish_time’: ‘2021/6/2’,
‘title’: ‘勒布朗詹姆斯率队拿下g5’,
‘link’: ‘https://www.baidu,com’,
‘reply_num’: 444
}
],
“navy_table”:
[{
‘publish_time’: ‘2021/4/23’,
‘title’: ‘测试3’,
‘link’: ‘https://www.baidu,com’,
‘reply_num’: 444
},
{
‘publish_time’: ‘2021/4/30’,
‘title’: ‘测试4’,
‘link’: ‘https://www.baidu,com’,
‘reply_num’: 444
},
{
‘publish_time’: ‘2021/5/30’,
‘title’: ‘测试5’,
‘link’: ‘https://www.baidu,com’,
‘reply_num’: 444
}
]
}
bawu_summary = dict()
bawu_sum_reply = 0 # 总有多少个回复
for bawu_data in bawu_lists.get(‘bawu_table’):
bawu_summary[‘bawu_publish_num’] = len(bawu_lists.get(‘bawu_table’, 0))
bawu_sum_reply += int(bawu_data.get(‘reply_num’, 0))
bawu_summary[‘bawu_sum_reply’] = bawu_sum_reply
navy_summary = dict()
navy_sum_reply = 0
for navy_data in bawu_lists.get(‘navy_table’):
navy_summary[‘navy_publish_num’] = len(bawu_lists.get(‘navy_table’, 0))
navy_sum_reply += int(navy_data.get(‘reply_num’, 0))
navy_summary[‘navy_sum_reply’] = navy_sum_reply
tpl.render({**context, **img_context, ** bawu_lists, **bawu_summary, **navy_summary}) # 多个字典解构
print(‘生成模板成功…’)
tpl.save(report_file)
def main(self):
tpl_file = “文件模板.docx” # 指定的模板
report_file = f"新得{self.last}-{self.now}报告.docx” # 指定生成的报告位置
self.generate_report(tpl_file, report_file)
if name == ‘main’:
demo = Generate2Word()
demo.main()
这样 就可以生成一个保留 word 格式的一个报告。
相关文章:
【Python】python使用docxtpl生成word模板
python使用docxtpl生成word模板 python-docxtpl包简单使用和实战,Python处理word,docx文件。 最近需要处理一些爬虫得到的数据来进行一些自动化报告的操作,因为需要生成的是word的报告,所以估选用docxtpl库来直接生成模板 docxt…...
C++学习笔记总结练习:多态与虚函数
1 多态 多态分类 静态多态,是只在编译期间确定的多态。静态多态在编译期间,根据函数参数的个数和类型推断出调用的函数。静态多态有两种实现的方式 重载。(函数重载)模板。 动态多态,是运行时多态。通过虚函数机制实…...
linux 批量更改指定后辍文件的可执行权限
要在Linux上批量更改指定后缀文件的可执行权限,您可以使用find命令来查找这些文件,然后使用chmod命令来更改它们的权限。以下是一些步骤: 1. 打开终端。 2. 使用 find 命令查找要更改权限的文件,例如,如果您想要更…...
数据结构(Java实现)-Map和Set
搜索树 概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也…...
C++进程、线程、内存管理
目录 进程和线程区别 进程和线程切换的区别 系统调用流程 系统调用是否会引起线程切换 为什么需要使用虚拟内存 进程和线程区别 本质区别: 进程是资源分配的基本单元。 线程是操作系统调度的基本单元。 地址空间: 进程具有独立的虚拟地址空间。 线程…...
打车系统网约车系统开发支持APP公众号H5小程序版本源码
一、操作流程 二、业务模式 三、用户端 用户注册登录:未注册的手机号将自动创建账号 通过好友的邀请链接进行注册,将会绑定上下级关系 也可以注册的时候输入好友的邀请码,也可以绑定关系 用户充值: 用户下单支付时,可以…...
HTTP/1.1协议的状态码
2023年8月30日,周三下午 HTTP/1.1协议定义了一组状态码,用于表示请求的处理结果。 每个状态码都有特定的含义,它们以三位数字的形式出现在响应的状态行中。 下面是一些常见的HTTP/1.1协议的状态码及其含义: 1xx(信息…...
SpringCloud(十)——ElasticSearch简单了解(一)初识ElasticSearch和RestClient
文章目录 1. 初始ElasticSearch1.1 ElasticSearch介绍1.2 安装并运行ElasticSearch1.3 运行kibana1.4 安装IK分词器 2. 操作索引库和文档2.1 mapping属性2.2 创建索引库2.3 对索引库的查、删、改2.4 操作文档 3. RestClient3.1 初始化RestClient3.2 操作索引库3.3 操作文档 1. …...
CAD文字显示?问号解决
背景 从别人哪儿发过来的CAD文件,打开后发现有些文字显示为? 问题排查 通过点击文字特性得知 该文字的样式是 SF和仿宋通过命令行执行st 得知,两种样式关联的字体都是仿宋GB_2312,但当前操作系统无此字体,故显示为&…...
Calico切换网络模式无效
Calico切换网络模式无效 Calico由原先的BGP模式切换为IP IP模式发现未生效,使用的模式还是BGP模式,Calico卸载后查询Etcd发现存在很多Calico数据 [rootk8s-master-1 ~]# etcdctl get / --prefix --keys-only | grep calico /calico/ipam/v2/assignment…...
数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成
数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成 目录 数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成生成效果基本描述程序设计参考资料 生成效果 基本描述 数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成。 生成对抗…...
iOS - 资源按需加载 - ODR
一、瘦身技术大图 二、On-Demand Resources 简介 将其保存管理在苹果的服务器,按需使用资源、优化包体积,实现更小的应用程序。ODR 的好处: 应用体积更小,下载更快,提升初次启动速度资源会在后台下载操作系统将会在磁…...
arduino仿真 SimulIDE1.0仿真器
SimulIDE 是一个开源的电子电路模拟器,支持模拟各种电子元器件的行为,可以帮助电子工程师和爱好者进行电路设计和测试。以下是 SimulIDE 的安装和使用说明: 安装 SimulIDE SimulIDE 可以在 Windows、Linux 和 Mac OS X 等操作系统上安装。您…...
vue实现导出excel的多种方式
在Vue中实现导出Excel有多种方式,可以通过前端实现,也可以通过前后端配合实现。下面将详细介绍几种常用的实现方式。 1. 前端实现方式: 使用xlsx库:使用xlsx库可以在前端将数据导出为Excel文件。首先需要安装xlsx库,…...
redis实战-实现优惠券秒杀解决超卖问题
全局唯一ID 唯一ID的必要性 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显,容易被用户根据id的间隔来猜测…...
C语言:截断+整型提升+算数转换练习
详情关于整型提升、算数转换与截断见文章: 《C语言:整型提升》 《C语言:算数转换》 一、代码一 int main() { char a -1; signed char b -1; unsigned char c -1; printf("%d %d %d", a, b, c); return 0; } 求…...
Java后端开发面试题——多线程
创建线程的方式有哪些? 继承Thread类 public class MyThread extends Thread {Overridepublic void run() {System.out.println("MyThread...run...");}public static void main(String[] args) {// 创建MyThread对象MyThread t1 new MyThread() ;MyTh…...
Redis 学习笔记
文章目录 一、简介二、下载三、安装四、启动和关闭五、配置文件六、常用指令七、安全加固 版权声明:本文为CSDN博主「杨群」的原创文章,遵循 CC 4.0 BY-SA版权协议,于2023年9月3日首发于CSDN,转载请附上原文出处链接及本声明。 原…...
华为云新生代开发者招募
开发者您好,我们是华为2012UCD的研究团队 为了解年轻开发者的开发现状和趋势 正在邀请各位先锋开发者,与我们进行2小时的线上交流(江浙沪附近可线下交流) 聊聊您日常开发工作中的产品使用需求 成功参与访谈者将获得至少300元京…...
DockerFile简明教程
需求 由于在测试环境中使用了docker官网的centos 镜像,但是该镜像里面默认没有安装ssh服务,在做测试时又需要开启ssh。所以上网也查了查资料。下面详细的纪录下。在centos 容器内安装ssh后,转成新的镜像用于后期测试使用。 镜像定制 第一种…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
