1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Py自動化辦公—Word文檔替換、Excel表格讀取、Pdf文件生成和Email自動郵件發(fā)送實戰(zhàn)案例

        共 6679字,需瀏覽 14分鐘

         ·

        2021-12-16 00:32

        點擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

        回復(fù)“書籍”即可獲贈Python從入門到進(jìn)階共10本電子書

        平陽歌舞新承寵,簾外春寒賜錦袍。

        大家好,我是Python進(jìn)階者。今天繼續(xù)給大家安排Python自動辦公應(yīng)用的實戰(zhàn)文章,之前還有一些自動化的文章,感興趣的小伙伴,可以看看,覺得不錯,記得點贊和留言支持噢,文章如下:

        1、盤點4種使用Python批量合并同一文件夾內(nèi)所有子文件夾下的Excel文件內(nèi)所有Sheet數(shù)據(jù)

        2、手把手教你使用openpyxl庫從Excel文件中提取指定的數(shù)據(jù)并生成新的文件(附源碼)

        3、手把手教你4種方法用Python批量實現(xiàn)多Excel多Sheet合并

        4、手把手教你利用Python輕松拆分Excel為多個CSV文件

        5、老板讓我從幾百個Excel中查找數(shù)據(jù),我用Python一分鐘搞定!

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

        7、Python 自動整理 Excel 表格

        8、利用Python將Word試卷匹配轉(zhuǎn)換為Excel表格

        9、手把手教你用Python腳本調(diào)用 DeepL API Pro 進(jìn)電子書的行進(jìn)行中英文自動翻譯

        10、手把手教你用Python批量創(chuàng)建1-12月份的sheet表,每個表的第一行都有固定3個列標(biāo)題:A,B,C

        【未完待續(xù)......】

        前言

        前幾天在學(xué)習(xí)【麥?zhǔn)濉康摹禤ython辦公效率手冊》一書,受益匪淺,原來Python自動化辦公這么有趣,目前學(xué)完了前面四章,將四章內(nèi)容串起來,整理成一篇小文章,分享給大家。當(dāng)然了,這里的展示只是冰山一角,更多精彩內(nèi)容還是要到原文中去汲取。

        背景

        想象一下,現(xiàn)在你有一份Word邀請函模板,然后你有一份客戶列表,上面有客戶的姓名、聯(lián)系方式、郵箱等基本信息,然后你的老板現(xiàn)在需要替換邀請函模板中的姓名,然后將Word邀請函模板生成Pdf格式,之后編輯統(tǒng)一的邀請話術(shù)(郵件正文),再依次發(fā)送邀請函附件到客戶郵箱,你會怎么做?正常情況下,我們肯定是復(fù)制粘貼Excel表格中的客戶姓名,之后挨個Word文檔進(jìn)行替換,之后將Word轉(zhuǎn)Pdf格式,然后復(fù)制Excel表格中的郵箱進(jìn)行發(fā)送編輯好的郵件正常,之后附上邀請函附件,點擊發(fā)送,大概算一下,激情高昂的狀態(tài)下,這個流程快的話,大概需要1分鐘甚至更多。如果客戶只有幾十個就還好,一個小時就可以搞定,如果客戶有幾百個,上千個,甚至上萬個呢?那估計要哭暈在辦公室了。

        不過別慌,Python自動化辦公,一套組合拳,使用Python自動化辦公——Word文檔替換、Excel表格讀取、Pdf文件生成和Email自動郵件發(fā)送一條龍服務(wù)安排,下面一起來看看吧!

        實現(xiàn)過程

        1)替換Word模板生成對應(yīng)邀請函

        這里以上面的Word模板做案例,編寫一個函數(shù)以客戶姓名進(jìn)行替換模板中的<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文檔的結(jié)構(gòu),一個文檔有多個段落,用doc.paragraphs獲取;段落中的文字用para.text獲取;一個段落中可能有多個不同樣式的文本,這些不同的樣式被稱為run,一個段落中包含多個run,用para.runs獲取,一個run中的具體文本用run.text獲取。了解了這些,再看上述代碼,是不是清晰很多呢?

        2)將Word邀請函轉(zhuǎn)化為Pdf格式

        這個就簡單很多了,Python自動化辦公中,一行代碼就可以實現(xiàn),而且速度還十分快。

        from docx2pdf import convert
        convert(f"./邀請函/{name}.docx")

        使用convert()函數(shù)可以把docx格式的文件轉(zhuǎn)換成同名的Pdf文檔。

        3)讀取Excel表格中的姓名和郵箱

        這里需要用到openpyxl庫了,當(dāng)然關(guān)于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)

        上面的代碼,理解起來應(yīng)該并不難,讀取Excel中的姓名和郵箱,之后傳到get_invitation()生成邀請函,之后傳給send_email()函數(shù)中自動發(fā)送郵件。實際上,這兩部是分開進(jìn)行的,這里是先執(zhí)行g(shù)et_invitation()函數(shù),先生成邀請函,之后再將該函數(shù)注釋掉,再執(zhí)行發(fā)送郵件函數(shù),

        4)自動發(fā)送郵件

        關(guān)于自動發(fā)送郵件,歷史文章中也曾經(jīng)發(fā)布過好幾篇了,這里繼續(xù)用上了,一開始我也覺得挺難的,后來發(fā)現(xiàn)也沒有想的那么復(fù)雜,代碼如下:

        smtp = smtplib.SMTP(host="smtp.qq.com", port=587)
        # smtp.login(郵箱, 授權(quán)碼)
        smtp.login('[email protected]', "ruybefkipoo")


        def send_email(name, email):
        msg = MIMEMultipart()
        msg["subject"] = f"您好,{name},您的邀請函!"
        msg["from"] = "[email protected]"
        msg["to"] = email

        html_content = f"""
        <html>
        <body>
        <p>您好:{name}<br>
        <b>歡迎加入Python進(jìn)階者學(xué)習(xí)交流群,請在附件中查收您的門票~</b><br>
        點擊這里了解更多:<a >演唱會主頁</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)
        # 發(fā)送前面準(zhǔn)備好的郵件
        smtp.send_message(msg)
        # 如果放到外邊登錄,這里就不用退出服務(wù)器連接,所以注釋掉了
        # smtp.quit()

        這里需要注意三點,其一是郵箱登錄放在了函數(shù)外邊,防止函數(shù)多次調(diào)用,短時間多次請求登錄郵箱被封禁;其二郵箱登錄里邊用的是授權(quán)碼,而不是你的郵箱登錄密碼,這里使用的是qq郵箱做示例,其他郵箱需要更改smtp服務(wù);其三這個代碼里邊除了正文中引用了html寫法,還攜帶了Pdf格式的邀請函附件,稍顯復(fù)雜。關(guān)于授權(quán)碼的獲取,這里不再贅述了,之前歷史文章頁寫過,網(wǎng)上的教程頁很多,不會的話,私我就行?;蛘邊⒖枷旅孢@個文章:手把手教你使用Python網(wǎng)絡(luò)爬蟲實現(xiàn)郵件定時發(fā)送(附源碼)。

        5)完整代碼

        以上四個步驟進(jìn)行拆分了,依次完成了Word文檔替換、Excel表格讀取、Pdf文件生成和Email自動郵件發(fā)送任務(wù),這里附上完整的代碼。

        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


        # 生成對應(yīng)的邀請函,并轉(zhuǎn)存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="smtp.qq.com", port=587)
        smtp.login('[email protected]', "ruybefkipoo")


        def send_email(name, email):
        msg = MIMEMultipart()
        msg["subject"] = f"您好,{name},您的邀請函!"
        msg["from"] = "[email protected]"
        msg["to"] = email

        html_content = f"""
        <html>
        <body>
        <p>您好:{name}<br>
        <b>歡迎加入Python進(jìn)階者學(xué)習(xí)交流群,請在附件中查收您的門票~</b><br>
        點擊這里了解更多:<a >演唱會主頁</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)
        # 發(fā)送前面準(zhǔn)備好的郵件
        smtp.send_message(msg)
        # 如果放到外邊登錄,這里就不用退出服務(wù)器連接,所以注釋掉了
        # 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進(jìn)階者')

        總結(jié)

        這篇文章基于Python自動化辦公,主要介紹了使用Python相關(guān)庫,依次完成Word文檔替換、Excel表格讀取、Pdf文件生成和Email自動郵件發(fā)送任務(wù)。程序運行之后,邀請函會自動生成,然后郵件會自動發(fā)送,速度也非???,給幾百個、上千個客戶發(fā)送邀請函就不害怕了,如果有上萬個客戶,可能需要借助第三方平臺輔助了,畢竟一般的普通郵箱,每日發(fā)送郵箱數(shù)是有限制的。

        人生苦短,我用Python!感謝【麥?zhǔn)濉刻峁┑乃夭暮痛a,親測有效,這里的介紹只是冰山一角,更多內(nèi)容可以前往《Python辦公效率手冊》中獲取。


        需要源數(shù)據(jù)的小伙伴可以添加我為好友,私我進(jìn)行獲取,或者前往我的github獲?。?/span>

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


            小伙伴們,快快用實踐一下吧!如果在學(xué)習(xí)過程中,有遇到任何問題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。

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

        往期精彩文章推薦:

        歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

        想加入Python學(xué)習(xí)群請在后臺回復(fù)【入群

        萬水千山總是情,點個【在看】行不行

        /今日留言主題/

        隨便說一兩句吧~~

        瀏覽 60
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            海角国产乱辈乱精品视频 | 日韩无码视频网 | 国内丰满少妇猛烈精品播 | 3p一女两男做爰免费观看 | 西西做爰免费视频 | 久久久网| 青青草原在线视频 | 日韩欧美在线一区二区 | 国产精品爽爽爽爽爽爽在线观看 | 处破初破苞一区二区三区在线观看 |