python批量生成word_实例5:用Python批量生成word版邀请函
每到年终时,公司都要举办年会,总结当年的得失。还有就是组织个晚会,表演些节目,抽奖......当然,还有,赏大餐一顿。人事部的妹子这时就发愁了,忙碌地进行各种准备不说,还要给供应商,政府部门发邀请函。这个邀请函其实除了受邀者的名字不同外,其它信息完全一样,纯粹的体力活。这种脏累活儿,就交给Python来干吧。
首先,我们需要将所有受邀者的公司名和代表姓名填入一个Excel表格。然后做好邀请函的模板,在需要填字的地方打上小星星“****”,然后就让Python来玩填字游戏啦。话不多说,直入主题,代码走一波......
#1.从Excel文件获取受邀人单位和名字
from openpyxl import load_workbook
wb=load_workbook('data/name_list.xlsx')
ws=wb['name']
names=[]
for row in range(2,ws.max_row+1):
company=ws["A"+str(row)].value
name=ws["B"+str(row)].value
names.append(" {} {} ".format(company,name))
names
>>[' 供应商1 王波 ',
' 供应商2 刘海洋 ',
' 供应商3 少和光 ',
' 供应商4 真凡巧 ',
' 供应商5 鲁鸿运 ',
' 政府1 乐清霁 ',
' 政府2 郎绮琴 ',
' 政府3 贝芳懿 ',
' 政府4 哈彦君 ']
我们首先导入openpyxl模块中的load_workbook模块。openpyxl是一个可读取Excel的第三方库。load_workbook()可打开一个现有的Excel文件(或叫工作簿)。我们使用load_workbook(path)读取文件,并存在变量wb里面。我们可以想象变量就是容器,用来储存各种数据,这里的wb就是这个容器的名字。wb存储的是整个工作簿的内容,我们知道一个Excel有几个工作表“Sheet”,接下来我们需要选取我们所需要的“Sheet”,也就是名字叫"name"的那张表。当然你可以给这个工作表起自己喜欢的名字,在写代码的时候把wb['name']中的"name"字样替换成你的个性化名字即可。
然后定义一个空列表names来存储受邀人单位和名字信息。随后我们遍历工作表,将所有信息提取出来存入列表names。因为工作表第一行是标题,所以我们从第2行开始,最大一行+1结束range(2,ws.max_row+1)。之所以要加1,是因为range(1,5)只能取到“1,2,3,4”四个值,5是取不到的。ws.max_row指工作表的总行数。然后我们开始提取公司名称,company=ws["A"+str(row)].value,当row取2时,就相当于将工作表中A2(即A列2行单元格的值)单元格的值传给了company变量。获取姓名也是类似的操作方式。
然后将公司名称和姓名排一下版,再加入names列表。" {} {} ".format(company,name)这个格式化字符串函数就完成了这个操作。我们在公司名和姓名之间及前后都加入了一个空格,这样在最终的邀请函上看起来就是这样的:“尊敬的 供应商1 王波 先生/女士:”。不留空格的话,就变成这样了:“尊敬的供应商1王波先生/女士:”,似乎有点不和谐。格式化字符串可以理解为,将format(company,name)括号中的值依次填入前面的{}。
# 2.批量填字,存为不同的word文件
import docx #导入处理word的库,无耻地直接使用别人造好的轮子
doc=docx.Document('data/邀请函.docx')
for name in names:
doc.paragraphs[1].runs[2].text=name
doc.save('data/邀请函_{}.docx'.format(name))
受邀人信息获取完成后,我们就可以开始批量生成邀请函了。首先导入处理word的库,无耻地直接使用别人造好的轮子。建立一个容器doc,来盛装打开的邀请函,docx.Document('data/邀请函.docx')为固定写法,括号内填写邀请函模板的路径及文件名。doc可理解为就是这个名为“邀请函”word文件。然后遍历names列表,将里面的信息逐个写入word文件的第二段的第三个run,即doc.paragraphs[1].runs[2].text=name,相当于直接用name的值“ 供应商1 王波 ”替换掉****。其中的run指的是每一段中的不同的格式,比如一段中有常规的,有加粗的,有斜体的,有不同颜色的字,那么就有好几个run。
那我们怎么知道****是第二段第三个run呢?通过我们制作的“邀请函”模板,我们知道****位于第二段(即doc.paragraphs[1],因为是从0开始计数,所以0表示第一段,1就表示第二段)。请注意word中若有空行,也算一段,比如模板中的"ABC有限公司"开头的那一段已经算是第四段了。我么将第二段的所有run打印出来,就可以找到****所在的run了。
doc=docx.Document('data/邀请函.docx')
for run in doc.paragraphs[1].runs:
print(run.text)
>>尊敬
的
****
先生
/
女士
:
我们可以看到其中有7个runs,虽然“尊敬的”三个字格式是一样的,但是还是被识别为两个单独的run了,可能这个库主要用来处理英文文档,拿来搞中文有些水土不服。不管它了,让它乱识别吧。通过以上的run打印,我们简单粗暴地数下去,可以知道****在第三个run,即run[2]。
然后逐个保存为单个的文件,并在给新的word文件命名时加上受邀人的信息doc.save('data/邀请函_{}.docx'.format(name))。得到的结果如下:
为了方便打印,可以使用word自带的合并功能将所有邀请函合并为一个word文件。打开第一个邀请函word文档,然后单击【插入】选项卡下的【对象】菜单中的【文件中的文字】选项,选择剩余的所有邀请函word文件,点插入,搞定!
所有源代码和说明都在Jupyter notebook上完成,所用到的Excel 资料已上传GitHub, 欢迎Fork或下载到本地随意玩。。。转载请注明出处,谢谢。
GitHub链接:https://github.com/weidylan/Office_Automation_by_Using_Python
微信公众号:Python操作EXCEL高效率工作
python批量生成word_实例5:用Python批量生成word版邀请函相关推荐
- python自动制作word_办公自动化5_用Python批量生成word版邀请函
-- coding: utf-8 -- """ Created on Sat Jul 11 23:06:30 2020 @author: Administrator &q ...
- python编程入门经典实例-总算明了python编程入门经典实例
跟Java语言一样,python语言也有类的概念,直接使用class关键字定义python类.在python类,定义类的方法.然后直接使用类的初始化调用自身,获取相应的属性.以下是小编为你整理的pyt ...
- python正则表达式处理txt,python 正则表达式参数替换实例详解 python使用正则表达式替换txt内容...
Python正则表达式如何进行字符串替换实例 import res = 'adds23dd56'ss = re.sub(r'\d', '*', s)>>> ss'adds**dd** ...
- python爬虫知网实例-33个Python爬虫项目实战(推荐)
今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...
- python数据库应用开发实例_纯Python开发的nosql数据库CodernityDB介绍和使用实例
看看这个logo,有些像python的小蛇吧 .这次介绍的数据库codernityDB是纯python开发的. 先前用了下tinyDB这个本地数据库,也在一个api服务中用了下,一开始觉得速度有些不给 ...
- python编程入门经典实例-终于明了python入门经典实例
算术最基本的操作符,是小学数学的+ - * / ,对于整数,还可以用+=,*=的操作符,对自身的值进行改变(对象引用).以下是小编为你整理的python入门经典实例 对于整数的加减乘除,但需要注意的是 ...
- python传递类的实例_使用Python将变量从一个类实例传递到另一个类实例?
我在将一个类实例中定义的变量传递到另一个类实例时遇到问题.我对使用类比较陌生,但据我所知,变量可以通过简单地定义为类实例的一部分(例如在下面的示例中)从一个实例传递到另一个实例.虽然我以前使用过这个模 ...
- python爬网站数据实例-如何用Python爬数据?(一)网页抓取
如何用Python爬数据?(一)网页抓取 你期待已久的Python网络数据爬虫教程来了.本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel. 需求 我在公众号后台,经常可以收到 ...
- python处理excel表格实例-通过实例学习Python Excel操作
这篇文章主要介绍了通过实例学习Python Excel操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.python 读取Excel # -* ...
最新文章
- codeforces round 416 div2补题
- Saas 平台,多域名,泛域名.如何做分站点的统计之解决方案
- 開玩樹莓派(二):配置IP,實現無顯示器局域網內Putty連接和RDP遠程
- AV1:为互联网提供开放、免费的视频编解码工具
- sqlserver2000给账户授予所有的权限_内网渗透 | 域内权限解读
- 【Clickhouse】Clckhouse 视图 可以插入 但是查询不到
- java 遗传算法_遗传算法的基本概念和实现(附 Java 实现案例)
- 【转】一个SQL查询出每门课程的成绩都大于80的学生姓名
- mPush实战笔记4安装mpush
- 百度地图做电子围栏总结
- 用741运算放大器搭建RC正弦振荡器:文氏电桥振荡电路
- ubuntu20.04 桌面文件和文件夹图标 丢失解决
- opencv-之求直线的斜率
- 2022智源大会议程公开 | 人工智能新基建论坛
- .NETZ 原理分析 .NETZ - .NET Executables Compressor .NETZ compresses the Microsoft .NET Framework execu
- OpenGL 加载DDS文件(压缩纹理)
- 学生课程成绩信息实体表设计mysql_数据库综合实验--设计某高校学生选课管理系统...
- 【2021知识蒸馏】Show, Attend and Distill:Knowledge Distillation via Attention-based Feature Matching
- Fater-RCNN
- QtAV视频播放器的介绍、编译以及简单使用