0

0

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

Go语言进阶学习

Go语言进阶学习

发布时间:2023-07-24 17:48:40

|

1402人浏览过

|

来源于Go语言进阶学习

转载

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

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

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

实现过程

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

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

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

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

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

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

def get_username_email():
    workbook = openpyxl.load_workbook("names.xlsx")
    worksheet = workbook.active
    for 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="smtp.qq.com", port=587)
# smtp.login(邮箱, 授权码)
smtp.login('235977@qq.com', "ruybefkipoo")


def send_email(name, email):
    msg = MIMEMultipart()
    msg["subject"] = f"您好,{name},您的邀请函!"
    msg["from"] = "2352180977@qq.com"
    msg["to"] = email

    html_content = f"""
    
        
                

您好:{name}
欢迎加入Python进阶者学习交流群,请在附件中查收您的门票~
点击这里了解更多:演唱会主页

""" 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 docx
from docx2pdf import convert
import openpyxl
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication


# 生成对应的邀请函,并转存pdf格式
def get_invitation(name):
    doc = docx.Document("template.docx")
    for para in doc.paragraphs:
        if '' in para.text:
            for run in para.runs:
                if '' in run.text:
                    run.text = run.text.replace('', name)
        doc.save(f'./邀请函/{name}.docx')
    convert(f"./邀请函/{name}.docx")


smtp = smtplib.SMTP(host="smtp.qq.com", port=587)
smtp.login('235977@qq.com', "ruybefkipoo")


def send_email(name, email):
    msg = MIMEMultipart()
    msg["subject"] = f"您好,{name},您的邀请函!"
    msg["from"] = "2352180977@qq.com"
    msg["to"] = email

    html_content = f"""
    
        
                

您好:{name}
欢迎加入Python进阶者学习交流群,请在附件中查收您的门票~
点击这里了解更多:演唱会主页

""" 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.active for 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) if __name__ == '__main__': get_username_email() # get_invitation('Python进阶者')

总结

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

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

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

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

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

https://github.com/cassieeric/Python-office-automation

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

765

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

639

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

619

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1285

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 4.8万人学习

Django 教程
Django 教程

共28课时 | 3.2万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号