首頁  >  文章  >  後端開發  >  Py自動化辦公室—Word文件替換、Excel表格讀取、Pdf文件產生及Email自動郵件傳送實戰案例

Py自動化辦公室—Word文件替換、Excel表格讀取、Pdf文件產生及Email自動郵件傳送實戰案例

Go语言进阶学习
Go语言进阶学习轉載
2023-07-24 17:48:401289瀏覽

想像一下,現在你有一份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模板做案例,編寫一個函數以客戶姓名進行替換模板中的8a11bc632ea32a57b3e3693c7987c420,一步到位。

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

上面這個程式碼需要理解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(&#39;235977@qq.com&#39;, "ruybefkipoo")


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

    html_content = f"""
    <html>
        <body>
                <p>您好:{name}<br>
                    <b>欢迎加入Python进阶者学习交流群,请在附件中查收您的门票~</b><br>
                    点击这里了解更多:<a href="https://www.pdcfighting.com">演唱会主页</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 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 &#39;<name>&#39; in para.text:
            for run in para.runs:
                if &#39;<name>&#39; in run.text:
                    run.text = run.text.replace(&#39;<name>&#39;, name)
        doc.save(f&#39;./邀请函/{name}.docx&#39;)
    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

以上是Py自動化辦公室—Word文件替換、Excel表格讀取、Pdf文件產生及Email自動郵件傳送實戰案例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:Go语言进阶学习。如有侵權,請聯絡admin@php.cn刪除