python-docx+pandas实现word邀请函批量生成
最近有个朋友请我帮忙,想根据表格中的邀请名单批量生成一批邀请函word文档,邀请函的格式固定,也就是说每个邀请函模板一致,只是被邀请人的姓名不一致。这样重复劳动最适合用Python解决了,下面是我的方案:
1. 设立模板文件占位符
我们首先把邀请函里邀请人的姓名改为:受邀人
,作为一个特定的占位符,方便我们后期替换,比如下面这个是我模拟的一份邀请函模板 template.docx
受邀人:诚邀您参加小方的婚礼,请您于2022年13月32日来不存在的地方用餐。---- 2022年8月12日...(这里有一些带格式的图片、表格)
2. 预处理表格
非程序员整的表格一般都有一些冗余信息,不方便处理,所以我们要整一个方便程序读入的表格格式,如下是我已经处理好的表格 list.xlsx
序号 | 所属公司 | 姓名 |
---|---|---|
1 | 字节 | 小方 |
2 | 腾讯 | 小王 |
3 | 阿里 | 小李 |
4 | 百度 | 小赵 |
3. 编写脚本
3.1 环境安装
本脚本运行环境:Python 3.9
,
所用库:python-docx
、pandas
、numpy
3.1 读取表格
我们使用 pandas
来进行读取
df = pd.read_excel(r"list.xlsx")
3.2 遍历表格内容
我们采用 元组迭代,逐行读取
for row in df.itertuples():idx = getattr(row, '序号')company = getattr(row, '所属公司')name = getattr(row, '姓名')generate_word(idx, company, name) # 核心函数,先占个位
3.3 生成邀请函
实现3.2中的generate_word函数
def generate_word(idx, company, name):document = Document(r"./template.docx") #读取模板for p in document.paragraphs: # 遍历每个段落if '受邀人' in p.text: # 判断每个段落是否含有占位符"受邀人"# 如果有,则继续遍历每个"字块",这里不直接替换是因为要保留格式for run in p.runs: if '受邀人' in run.text:run.text = run.text.replace('受邀人', f'{company}的{name}')run.italic = Falsedocument.save(f'{idx}-{company}-{name}.docx') # 生成文档
3.4 总结
import numpy as np
import pandas as pd
from docx import Documentdef generate_word(idx, company, name):document = Document(r"./template.docx") #读取模板for p in document.paragraphs: # 遍历每个段落if '受邀人' in p.text: # 判断每个段落是否含有占位符"受邀人"# 如果有,则继续遍历每个"字块",这里不直接替换是因为要保留格式for run in p.runs: if '受邀人' in run.text:run.text = run.text.replace('受邀人', f'{company}的{name}')run.italic = Falsedocument.save(f'{idx}-{company}-{name}.docx') # 生成文档if __name__=="__main__":df = pd.read_excel(r"list.xlsx")for row in df.itertuples():idx = getattr(row, '序号')company = getattr(row, '所属公司')name = getattr(row, '姓名')generate_word(idx, company, name)
当然,这个只是简化后的版本,真实场景可以无限拓展,思路是差不多的。
python-docx+pandas实现word邀请函批量生成相关推荐
- Python实践5:基于word模板批量生成邀请函
替换word模板中的客户姓名及落款时间,批量生成邀请函. 代码如下: ''' 依赖的包:python-docx 安装:pip install python-docx 引用:import docx 参考 ...
- Excel的简单Word报告批量生成 vba笔记 (一)
批量生成Excel的简单Word报告/vba/录制宏 Sub piliangshengcheng() Set dd = CreateObject("excel.application&quo ...
- Python实现读取Excel表内容批量生成二维码
目录 一.概述 二.依赖库安装 三.Execl内容 四.代码片段 五.demo下载连接 一.概述 最近由于工作原因,需要用到大量二维码,如果用某料二维码生成器生成的话,要么一个一个生成,要么花钱开会员 ...
- Python之深入解析如何一键批量生成真实的手机号码及其号码归属地解析
① 目标场景 平时在工作过程中,偶尔会需要大量的手机号码,去测试一些具体的业务功能,为了保证测试的有效性,手机号码的真实性尤为的重要. 那如何按要求批量生成一些真实的手机号码呢?本文就带大家利用 Py ...
- php导出成word试卷,依据word模板批量生成试卷
java-word-MassProduction 目录 一.使用方法 1.制造题库所需Word模板 需要填充数据的地方使用 ${pid} 代替. 将这个word选择另存为,保存格式选择为xml,然后将 ...
- 依据word模板批量生成试卷
java-word-MassProduction 目录 使用方法 开发流程 一.使用方法 1.制造题库所需Word模板 需要填充数据的地方使用 ${pid} 代替. 将这个word选择另存为,保存格式 ...
- 使用python 将excel中数据批量生成word周报
使用python 将excel中数据调用word模板批量生成word周报 背景 环境 功能需求 程序实现 背景 日常项目中每周需要召开项目周会,会议纪要和会议周报是必不可少的一项内容,会议纪要要求监理 ...
- python批量生成,用python批量生成简单的xml文档
最近生成训练数据时,给一批无效的背景图片生成对应的xml文档,我用python写了一个简单的批量生成xml文档的demo,遇见了意外的小问题,记录一下. 报错问题为:ImportError: No m ...
- 艺赛旗(PRA)根据制式模板批量生成 word 文件
艺赛旗 RPA8.0全新首发免费下载 点击下载 http://www.i-search.com.cn/index.html?from=line1 请看程序运行过程: 操作 word 其实是一件很痛苦的 ...
最新文章
- 《数据结构》之数组结构和链表
- avalon.js 转义html,avalon模块的内建适配器
- 二叉树的建立与三种遍历
- 组装生成HashMap结构类型
- Enterprise Architect 8.0 注册码及其使用教程
- php仿u8系统模板_用友U8:项目型制造企业的信息化模板
- 深度学习笔记----拓扑结构动态变化网络(Dropout,Drop Connect, Stochastic Depth, BranchyNet,Blockdrop,SkipNet)
- 你大学生活最美好的时刻是?
- 带符号整数中负数采用什么编码_转载:二进制编码--负数
- #Java学习#习题一
- App测试中IOS和安卓测试的区别
- 计算机网络云怎么连接网络设置方法,华为云电脑如何连网,华为云电脑使用教程...
- 接口压测实践-压力测试常见参数解释说明
- 中国医用器械产业运行状况分析与投资策略研究报告2022-2028年
- 海思 芯片开发 面经
- 『C』程序的翻译执行
- 软件项目管理之(估算代码行,类比估算,自下而上估算)
- 浅谈你们根本不懂的区块链游戏 1
- CSS如何让文字居中
- 分享一个fps爱好者可能会遇到的ensp路由器启动报40错误
热门文章
- 苍溪城郊中学2021高考成绩查询,苍溪县城郊中学2019高考成绩喜报、一本二本上线人数情况...
- 此身谁料,心在天山,身老沧洲
- 契约锁android代码,契约锁怎么签合同
- springboot毕设项目电信CRM系统的设计与实现3z7u5(java+VUE+Mybatis+Maven+Mysql)
- 如何阅读《深入理解计算机系统》
- 安卓隐藏摄像_一款可以隐藏录像的app
- 写给我的如风老男人(终结版)
- 人在弥留之际的五大憾事
- 用“埃氏筛法”求2~10000以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。
- Hrbust 1837 Dream【dp】