700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Py自动化办公—Word文档替换 Excel表格读取 Pdf文件生成和Email自动邮件发送实战案例...

Py自动化办公—Word文档替换 Excel表格读取 Pdf文件生成和Email自动邮件发送实战案例...

时间:2023-03-31 04:06:47

相关推荐

Py自动化办公—Word文档替换 Excel表格读取 Pdf文件生成和Email自动邮件发送实战案例...

点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

平阳歌舞新承宠,帘外春寒赐锦袍。

大家好,我是Python进阶者。今天继续给大家安排Python自动办公应用的实战文章,之前还有一些自动化的文章,感兴趣的小伙伴,可以看看,觉得不错,记得点赞和留言支持噢,文章如下:

1、盘点4种使用Python批量合并同一文件夹内所有子文件夹下的Excel文件内所有Sheet数据

2、手把手教你使用openpyxl库从Excel文件中提取指定的数据并生成新的文件(附源码)

3、手把手教你4种方法用Python批量实现多Excel多Sheet合并

4、手把手教你利用Python轻松拆分Excel为多个CSV文件

5、老板让我从几百个Excel中查找数据,我用Python一分钟搞定!

6、Python+Excel+Word一秒制作百份合同

7、Python 自动整理 Excel 表格

8、利用Python将Word试卷匹配转换为Excel表格

9、手把手教你用Python脚本调用 DeepL API Pro 进电子书的行进行中英文自动翻译

10、手把手教你用Python批量创建1-12月份的sheet表,每个表的第一行都有固定3个列标题:A,B,C

【未完待续......】

前言

前几天在学习【麦叔】的《Python办公效率手册》一书,受益匪浅,原来Python自动化办公这么有趣,目前学完了前面四章,将四章内容串起来,整理成一篇小文章,分享给大家。当然了,这里的展示只是冰山一角,更多精彩内容还是要到原文中去汲取。

背景

想象一下,现在你有一份Word邀请函模板,然后你有一份客户列表,上面有客户的姓名、联系方式、邮箱等基本信息,然后你的老板现在需要替换邀请函模板中的姓名,然后将Word邀请函模板生成Pdf格式,之后编辑统一的邀请话术(邮件正文),再依次发送邀请函附件到客户邮箱,你会怎么做?正常情况下,我们肯定是复制粘贴Excel表格中的客户姓名,之后挨个Word文档进行替换,之后将Word转Pdf格式,然后复制Excel表格中的邮箱进行发送编辑好的邮件正常,之后附上邀请函附件,点击发送,大概算一下,激情高昂的状态下,这个流程快的话,大概需要1分钟甚至更多。如果客户只有几十个就还好,一个小时就可以搞定,如果客户有几百个,上千个,甚至上万个呢?那估计要哭晕在办公室了。

不过别慌,Python自动化办公,一套组合拳,使用Python自动化办公——Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送一条龙服务安排,下面一起来看看吧!

实现过程

1)替换Word模板生成对应邀请函

这里以上面的Word模板做案例,编写一个函数以客户姓名进行替换模板中的<name>,一步到位。

def get_invitation(name):doc = docx.Document("template.docx")for para in doc.paragraphs:if '<name>' in para.text:for run in para.runs:if '<name>' in run.text:run.text = run.text.replace('<name>', name)doc.save(f'./邀请函/{name}.docx')

上面这个代码需要理解Word文档的结构,一个文档有多个段落,用doc.paragraphs获取;段落中的文字用para.text获取;一个段落中可能有多个不同样式的文本,这些不同的样式被称为run,一个段落中包含多个run,用para.runs获取,一个run中的具体文本用run.text获取。了解了这些,再看上述代码,是不是清晰很多呢?

2)将Word邀请函转化为Pdf格式

这个就简单很多了,Python自动化办公中,一行代码就可以实现,而且速度还十分快。

from docx2pdf import convertconvert(f"./邀请函/{name}.docx")

使用convert()函数可以把docx格式的文件转换成同名的Pdf文档。

3)读取Excel表格中的姓名和邮箱

这里需要用到openpyxl库了,当然关于Excel的库还是很多的,这里以这个库作为示例,代码如下:

def get_username_email():workbook = openpyxl.load_workbook("names.xlsx")worksheet = workbook.activefor index, row in enumerate(worksheet.rows):if index > 0:name = row[0].value # 获取表格第一列的姓名email = row[3].value # 获取表格第四列的邮箱# print(name, email)# print(f"{name}邀请函正在生成...")# get_invitation(name)send_email(name, email)

上面的代码,理解起来应该并不难,读取Excel中的姓名和邮箱,之后传到get_invitation()生成邀请函,之后传给send_email()函数中自动发送邮件。实际上,这两部是分开进行的,这里是先执行get_invitation()函数,先生成邀请函,之后再将该函数注释掉,再执行发送邮件函数,

4)自动发送邮件

关于自动发送邮件,历史文章中也曾经发布过好几篇了,这里继续用上了,一开始我也觉得挺难的,后来发现也没有想的那么复杂,代码如下:

smtp = smtplib.SMTP(host="", port=587)# smtp.login(邮箱, 授权码)smtp.login('235977@', "ruybefkipoo")def send_email(name, email):msg = MIMEMultipart()msg["subject"] = f"您好,{name},您的邀请函!"msg["from"] = "2352180977@"msg["to"] = emailhtml_content = f"""<html><body><p>您好:{name}<br><b>欢迎加入Python进阶者学习交流群,请在附件中查收您的门票~</b><br>点击这里了解更多:<a href="">演唱会主页</a></p></body></html>"""html_part = MIMEText(html_content, "html")msg.attach(html_part)with open(f"./邀请函/{name}.pdf", "rb") as f:doc_part = MIMEApplication(f.read())doc_part.add_header("Content-Disposition", "attachment", filename=name)# 把附件添加到邮件中msg.attach(doc_part)# 发送前面准备好的邮件smtp.send_message(msg)# 如果放到外边登录,这里就不用退出服务器连接,所以注释掉了# smtp.quit()

这里需要注意三点,其一是邮箱登录放在了函数外边,防止函数多次调用,短时间多次请求登录邮箱被封禁;其二邮箱登录里边用的是授权码,而不是你的邮箱登录密码,这里使用的是qq邮箱做示例,其他邮箱需要更改smtp服务;其三这个代码里边除了正文中引用了html写法,还携带了Pdf格式的邀请函附件,稍显复杂。关于授权码的获取,这里不再赘述了,之前历史文章页写过,网上的教程页很多,不会的话,私我就行。或者参考下面这个文章:手把手教你使用Python网络爬虫实现邮件定时发送(附源码)。

5)完整代码

以上四个步骤进行拆分了,依次完成了Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送任务,这里附上完整的代码。

import docxfrom docx2pdf import convertimport openpyxlimport smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.application import MIMEApplication# 生成对应的邀请函,并转存pdf格式def get_invitation(name):doc = docx.Document("template.docx")for para in doc.paragraphs:if '<name>' in para.text:for run in para.runs:if '<name>' in run.text:run.text = run.text.replace('<name>', name)doc.save(f'./邀请函/{name}.docx')convert(f"./邀请函/{name}.docx")smtp = smtplib.SMTP(host="", port=587)smtp.login('235977@', "ruybefkipoo")def send_email(name, email):msg = MIMEMultipart()msg["subject"] = f"您好,{name},您的邀请函!"msg["from"] = "2352180977@"msg["to"] = emailhtml_content = f"""<html><body><p>您好:{name}<br><b>欢迎加入Python进阶者学习交流群,请在附件中查收您的门票~</b><br>点击这里了解更多:<a href="">演唱会主页</a></p></body></html>"""html_part = MIMEText(html_content, "html")msg.attach(html_part)with open(f"./邀请函/{name}.pdf", "rb") as f:doc_part = MIMEApplication(f.read())doc_part.add_header("Content-Disposition", "attachment", filename=name)# 把附件添加到邮件中msg.attach(doc_part)# 发送前面准备好的邮件smtp.send_message(msg)# 如果放到外边登录,这里就不用退出服务器连接,所以注释掉了# smtp.quit()def get_username_email():workbook = openpyxl.load_workbook("names.xlsx")worksheet = workbook.activefor index, row in enumerate(worksheet.rows):if index > 0:name = row[0].valueemail = row[3].value# print(name, email)# print(f"{name}邀请函正在生成...")# get_invitation(name)send_email(name, email)if __name__ == '__main__':get_username_email()# get_invitation('Python进阶者')

总结

这篇文章基于Python自动化办公,主要介绍了使用Python相关库,依次完成Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送任务。程序运行之后,邀请函会自动生成,然后邮件会自动发送,速度也非常快,给几百个、上千个客户发送邀请函就不害怕了,如果有上万个客户,可能需要借助第三方平台辅助了,毕竟一般的普通邮箱,每日发送邮箱数是有限制的。

人生苦短,我用Python!感谢【麦叔】提供的素材和代码,亲测有效,这里的介绍只是冰山一角,更多内容可以前往《Python办公效率手册》中获取。

需要源数据的小伙伴可以添加我为好友,私我进行获取,或者前往我的github获取:

/cassieeric/Python-office-automation

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

-------------------End-------------------

往期精彩文章推荐:

Python中encode和encoding的区别是什么?

手把手教你使用openpyxl库从Excel文件中提取指定的数据并生成新的文件(附源码)

手把手教你用Python来模拟绘制自由落体运动过程中的抛物线(附源码)

盘点3种Python网络爬虫过程中的中文乱码的处理方法

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。