最近有个朋友请我帮忙,想根据表格中的邀请名单批量生成一批邀请函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-docxpandasnumpy

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邀请函批量生成相关推荐

  1. Python实践5:基于word模板批量生成邀请函

    替换word模板中的客户姓名及落款时间,批量生成邀请函. 代码如下: ''' 依赖的包:python-docx 安装:pip install python-docx 引用:import docx 参考 ...

  2. Excel的简单Word报告批量生成 vba笔记 (一)

    批量生成Excel的简单Word报告/vba/录制宏 Sub piliangshengcheng() Set dd = CreateObject("excel.application&quo ...

  3. Python实现读取Excel表内容批量生成二维码

    目录 一.概述 二.依赖库安装 三.Execl内容 四.代码片段 五.demo下载连接 一.概述 最近由于工作原因,需要用到大量二维码,如果用某料二维码生成器生成的话,要么一个一个生成,要么花钱开会员 ...

  4. Python之深入解析如何一键批量生成真实的手机号码及其号码归属地解析

    ① 目标场景 平时在工作过程中,偶尔会需要大量的手机号码,去测试一些具体的业务功能,为了保证测试的有效性,手机号码的真实性尤为的重要. 那如何按要求批量生成一些真实的手机号码呢?本文就带大家利用 Py ...

  5. php导出成word试卷,依据word模板批量生成试卷

    java-word-MassProduction 目录 一.使用方法 1.制造题库所需Word模板 需要填充数据的地方使用 ${pid} 代替. 将这个word选择另存为,保存格式选择为xml,然后将 ...

  6. 依据word模板批量生成试卷

    java-word-MassProduction 目录 使用方法 开发流程 一.使用方法 1.制造题库所需Word模板 需要填充数据的地方使用 ${pid} 代替. 将这个word选择另存为,保存格式 ...

  7. 使用python 将excel中数据批量生成word周报

    使用python 将excel中数据调用word模板批量生成word周报 背景 环境 功能需求 程序实现 背景 日常项目中每周需要召开项目周会,会议纪要和会议周报是必不可少的一项内容,会议纪要要求监理 ...

  8. python批量生成,用python批量生成简单的xml文档

    最近生成训练数据时,给一批无效的背景图片生成对应的xml文档,我用python写了一个简单的批量生成xml文档的demo,遇见了意外的小问题,记录一下. 报错问题为:ImportError: No m ...

  9. 艺赛旗(PRA)根据制式模板批量生成 word 文件

    艺赛旗 RPA8.0全新首发免费下载 点击下载 http://www.i-search.com.cn/index.html?from=line1 请看程序运行过程: 操作 word 其实是一件很痛苦的 ...

最新文章

  1. 《数据结构》之数组结构和链表
  2. avalon.js 转义html,avalon模块的内建适配器
  3. 二叉树的建立与三种遍历
  4. 组装生成HashMap结构类型
  5. Enterprise Architect 8.0 注册码及其使用教程
  6. php仿u8系统模板_用友U8:项目型制造企业的信息化模板
  7. 深度学习笔记----拓扑结构动态变化网络(Dropout,Drop Connect, Stochastic Depth, BranchyNet,Blockdrop,SkipNet)
  8. 你大学生活最美好的时刻是?
  9. 带符号整数中负数采用什么编码_转载:二进制编码--负数
  10. #Java学习#习题一
  11. App测试中IOS和安卓测试的区别
  12. 计算机网络云怎么连接网络设置方法,华为云电脑如何连网,华为云电脑使用教程...
  13. 接口压测实践-压力测试常见参数解释说明
  14. 中国医用器械产业运行状况分析与投资策略研究报告2022-2028年
  15. 海思 芯片开发 面经
  16. 『C』程序的翻译执行
  17. 软件项目管理之(估算代码行,类比估算,自下而上估算)
  18. 浅谈你们根本不懂的区块链游戏 1
  19. CSS如何让文字居中
  20. 分享一个fps爱好者可能会遇到的ensp路由器启动报40错误

热门文章

  1. 苍溪城郊中学2021高考成绩查询,苍溪县城郊中学2019高考成绩喜报、一本二本上线人数情况...
  2. 此身谁料,心在天山,身老沧洲
  3. 契约锁android代码,契约锁怎么签合同
  4. springboot毕设项目电信CRM系统的设计与实现3z7u5(java+VUE+Mybatis+Maven+Mysql)
  5. 如何阅读《深入理解计算机系统》
  6. 安卓隐藏摄像_一款可以隐藏录像的app
  7. 写给我的如风老男人(终结版)
  8. 人在弥留之际的五大憾事
  9. 用“埃氏筛法”求2~10000以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。
  10. Hrbust 1837 Dream【dp】