自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 前端 自動(dòng)化
想象一下,現(xiàn)在你有一份Word邀請(qǐng)函模板,然后你有一份客戶列表,上面有客戶的姓名、聯(lián)系方式、郵箱等基本信息,然后你的老板現(xiàn)在需要替換邀請(qǐng)函模板中的姓名,然后將Word邀請(qǐng)函模板生成Pdf格式,之后編輯統(tǒng)一的邀請(qǐng)?jiān)捫g(shù)(郵件正文),再依次發(fā)送邀請(qǐng)函附件到客戶郵箱,你會(huì)怎么做?

[[440244]]

前言

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

背景

想象一下,現(xiàn)在你有一份Word邀請(qǐng)函模板,然后你有一份客戶列表,上面有客戶的姓名、聯(lián)系方式、郵箱等基本信息,然后你的老板現(xiàn)在需要替換邀請(qǐng)函模板中的姓名,然后將Word邀請(qǐng)函模板生成Pdf格式,之后編輯統(tǒng)一的邀請(qǐng)?jiān)捫g(shù)(郵件正文),再依次發(fā)送邀請(qǐng)函附件到客戶郵箱,你會(huì)怎么做?

正常情況下,我們肯定是復(fù)制粘貼Excel表格中的客戶姓名,之后挨個(gè)Word文檔進(jìn)行替換,之后將Word轉(zhuǎn)Pdf格式,然后復(fù)制Excel表格中的郵箱進(jìn)行發(fā)送編輯好的郵件正常,之后附上邀請(qǐng)函附件,點(diǎn)擊發(fā)送,大概算一下,激情高昂的狀態(tài)下,這個(gè)流程快的話,大概需要1分鐘甚至更多。如果客戶只有幾十個(gè)就還好,一個(gè)小時(shí)就可以搞定,如果客戶有幾百個(gè),上千個(gè),甚至上萬(wàn)個(gè)呢?那估計(jì)要哭暈在辦公室了。

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

實(shí)現(xiàn)過程

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

這里以上面的Word模板做案例,編寫一個(gè)函數(shù)以客戶姓名進(jìn)行替換模板中的,一步到位。

  1. def get_invitation(name): 
  2.     doc = docx.Document("template.docx"
  3.     for para in doc.paragraphs: 
  4.         if '<name>' in para.text: 
  5.             for run in para.runs: 
  6.                 if '<name>' in run.text: 
  7.                     run.text = run.text.replace('<name>'name
  8.         doc.save(f'./邀請(qǐng)函/{name}.docx'

上面這個(gè)代碼需要理解Word文檔的結(jié)構(gòu),一個(gè)文檔有多個(gè)段落,用doc.paragraphs獲取;段落中的文字用para.text獲取;一個(gè)段落中可能有多個(gè)不同樣式的文本,這些不同的樣式被稱為run,一個(gè)段落中包含多個(gè)run,用para.runs獲取,一個(gè)run中的具體文本用run.text獲取。了解了這些,再看上述代碼,是不是清晰很多呢?

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

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

  1. from docx2pdf import convert 
  2. convert(f"./邀請(qǐng)函/{name}.docx"

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

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

這里需要用到openpyxl庫(kù)了,當(dāng)然關(guān)于Excel的庫(kù)還是很多的,這里以這個(gè)庫(kù)作為示例,代碼如下:

  1. def get_username_email(): 
  2.     workbook = openpyxl.load_workbook("names.xlsx"
  3.     worksheet = workbook.active 
  4.     for index, row in enumerate(worksheet.rows): 
  5.         if index > 0: 
  6.             name = row[0].value  # 獲取表格第一列的姓名 
  7.             email = row[3].value  # 獲取表格第四列的郵箱 
  8.             # print(name, email) 
  9.             # print(f"{name}邀請(qǐng)函正在生成..."
  10.             # get_invitation(name
  11.             send_email(name, email) 

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

4)自動(dòng)發(fā)送郵件

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

  1. smtp = smtplib.SMTP(host="smtp.qq.com", port=587) 
  2. # smtp.login(郵箱, 授權(quán)碼) 
  3. smtp.login('235977@qq.com'"ruybefkipoo"
  4.  
  5.  
  6. def send_email(name, email): 
  7.     msg = MIMEMultipart() 
  8.     msg["subject"] = f"您好,{name},您的邀請(qǐng)函!" 
  9.     msg["from"] = "2352180977@qq.com" 
  10.     msg["to"] = email 
  11.  
  12.     html_content = f""
  13.     <html> 
  14.         <body> 
  15.                 <p>您好:{name}<br> 
  16.                     <b>歡迎加入Python進(jìn)階者學(xué)習(xí)交流群,請(qǐng)?jiān)诟郊胁槭漳拈T票~</b><br> 
  17.                     點(diǎn)擊這里了解更多:<a href="https://www.pdcfighting.com">演唱會(huì)主頁(yè)</a> 
  18.                 </p> 
  19.         </body> 
  20.     </html> 
  21.     ""
  22.     html_part = MIMEText(html_content, "html"
  23.     msg.attach(html_part) 
  24.     with open(f"./邀請(qǐng)函/{name}.pdf""rb"as f: 
  25.         doc_part = MIMEApplication(f.read()) 
  26.         doc_part.add_header("Content-Disposition""attachment", filename=name
  27.         # 把附件添加到郵件中 
  28.         msg.attach(doc_part) 
  29.         # 發(fā)送前面準(zhǔn)備好的郵件 
  30.         smtp.send_message(msg) 
  31.         # 如果放到外邊登錄,這里就不用退出服務(wù)器連接,所以注釋掉了 
  32.         # smtp.quit() 

這里需要注意三點(diǎn),其一是郵箱登錄放在了函數(shù)外邊,防止函數(shù)多次調(diào)用,短時(shí)間多次請(qǐng)求登錄郵箱被封禁;其二郵箱登錄里邊用的是授權(quán)碼,而不是你的郵箱登錄密碼,這里使用的是qq郵箱做示例,其他郵箱需要更改smtp服務(wù);其三這個(gè)代碼里邊除了正文中引用了html寫法,還攜帶了Pdf格式的邀請(qǐng)函附件,稍顯復(fù)雜。關(guān)于授權(quán)碼的獲取,這里不再贅述了,之前歷史文章頁(yè)寫過,網(wǎng)上的教程頁(yè)很多,不會(huì)的話,私我就行。

5)完整代碼

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

  1. import docx 
  2. from docx2pdf import convert 
  3. import openpyxl 
  4. import smtplib 
  5. from email.mime.text import MIMEText 
  6. from email.mime.multipart import MIMEMultipart 
  7. from email.mime.application import MIMEApplication 
  8.  
  9.  
  10. # 生成對(duì)應(yīng)的邀請(qǐng)函,并轉(zhuǎn)存pdf格式 
  11. def get_invitation(name): 
  12.     doc = docx.Document("template.docx"
  13.     for para in doc.paragraphs: 
  14.         if '<name>' in para.text: 
  15.             for run in para.runs: 
  16.                 if '<name>' in run.text: 
  17.                     run.text = run.text.replace('<name>'name
  18.         doc.save(f'./邀請(qǐng)函/{name}.docx'
  19.     convert(f"./邀請(qǐng)函/{name}.docx"
  20.  
  21.  
  22. smtp = smtplib.SMTP(host="smtp.qq.com", port=587) 
  23. smtp.login('235977@qq.com'"ruybefkipoo"
  24.  
  25.  
  26. def send_email(name, email): 
  27.     msg = MIMEMultipart() 
  28.     msg["subject"] = f"您好,{name},您的邀請(qǐng)函!" 
  29.     msg["from"] = "2352180977@qq.com" 
  30.     msg["to"] = email 
  31.  
  32.     html_content = f""
  33.     <html> 
  34.         <body> 
  35.                 <p>您好:{name}<br> 
  36.                     <b>歡迎加入Python進(jìn)階者學(xué)習(xí)交流群,請(qǐng)?jiān)诟郊胁槭漳拈T票~</b><br> 
  37.                     點(diǎn)擊這里了解更多:<a href="https://www.pdcfighting.com">演唱會(huì)主頁(yè)</a> 
  38.                 </p> 
  39.         </body> 
  40.     </html> 
  41.     ""
  42.     html_part = MIMEText(html_content, "html"
  43.     msg.attach(html_part) 
  44.     with open(f"./邀請(qǐng)函/{name}.pdf""rb"as f: 
  45.         doc_part = MIMEApplication(f.read()) 
  46.         doc_part.add_header("Content-Disposition""attachment", filename=name
  47.         # 把附件添加到郵件中 
  48.         msg.attach(doc_part) 
  49.         # 發(fā)送前面準(zhǔn)備好的郵件 
  50.         smtp.send_message(msg) 
  51.         # 如果放到外邊登錄,這里就不用退出服務(wù)器連接,所以注釋掉了 
  52.         # smtp.quit() 
  53.  
  54.  
  55. def get_username_email(): 
  56.     workbook = openpyxl.load_workbook("names.xlsx"
  57.     worksheet = workbook.active 
  58.     for index, row in enumerate(worksheet.rows): 
  59.         if index > 0: 
  60.             name = row[0].value 
  61.             email = row[3].value 
  62.             # print(name, email) 
  63.             # print(f"{name}邀請(qǐng)函正在生成..."
  64.             # get_invitation(name
  65.             send_email(name, email) 
  66.  
  67.  
  68. if __name__ == '__main__'
  69.     get_username_email() 
  70.     # get_invitation('Python進(jìn)階者'

總結(jié)

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

本文轉(zhuǎn)載自微信公眾號(hào)「Python爬蟲與數(shù)據(jù)挖掘」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Python爬蟲與數(shù)據(jù)挖掘公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: Python爬蟲與數(shù)據(jù)挖掘
相關(guān)推薦

2021-12-28 09:24:49

Python郵件Word

2022-03-21 10:09:08

PythonExcel郵件

2023-11-20 22:07:51

PythonPDF

2024-09-25 10:00:00

Python自動(dòng)化辦公

2020-04-21 10:45:47

PythonWordExcel

2021-04-17 23:10:59

Python微軟Word

2022-07-05 08:26:10

Python報(bào)表自動(dòng)化郵箱

2020-11-05 12:56:19

Python辦公自動(dòng)化

2021-02-01 11:03:36

Python開發(fā)郵件

2022-06-13 09:12:04

PythonPDF代碼

2024-05-29 11:16:33

PythonExcel

2024-11-11 16:55:54

2021-07-09 07:24:47

Python自動(dòng)化辦公

2025-04-23 08:15:00

2020-01-16 09:00:00

AI人工智能ML

2021-03-12 08:56:10

Java組件

2023-10-18 13:57:17

2014-06-26 09:23:34

2009-09-04 13:55:04

C#文檔自動(dòng)化

2017-12-17 21:58:18

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)