python拆分excel的sheet为单文件_python拆分Excel表格并发送邮件
工作中經常會出現需要將數據按一定的條件拆分并分發給不同的收件人的情況,今天就來給大家分享一下如何使用python拆分Excel表格并分發郵件。
以下表(2019年下半年銷量數據表)數據為例:
首先我們需要一張包含收件人郵箱列表的Excel表格,具體數據如下圖所示:
具體代碼:
#導入模塊
import pandas as pd
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.header import Header
import smtplib
#定義編寫郵件函數
def create_email(email_from,email_to,email_subject,email_text,annex_path,annex_name):
#發件人,收件人,主題,正文,附件地址,附件名稱
#創建一個帶附件的實例
message=MIMEMultipart()
#生成發件人名稱
message['From']=Header(email_from,'utf-8')
#生成收件人名稱
message['to']=Header(email_to,'utf-8')
#生成郵件主題
message['Subject']=Header(email_subject,'utf-8')
#郵件正文內容
message.attach(MIMEText(email_text,'plain','utf-8'))
#構造附件
xlsxpart=MIMEApplication(open(annex_path, 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename=('gbk', '', annex_name))
#注意:此處annex_name要轉換為gbk編碼,否則中文會有亂碼。
#將附件內容插入郵件中
message.attach(xlsxpart)
#返回郵件
return message
#定義發送郵件函數
def send_email(sender,password,receivers,msg):
#發件人郵箱,密碼,收件人郵箱列表,郵件內容,發送郵件的函數
try:
#找到發件人郵箱的服務器地址,以加密形式發送 server=smtplib.SMTP_SSL("smtp.qq.com", 465)
#發件人郵箱服務器地址,端口(這是QQ郵箱的SMTP服務器地址和端口)
#server.ehlo()
#登錄賬號
server.login(sender,password)#發件人郵箱賬號,密碼
#發送郵件 server.sendmail(sender,receivers,msg.as_string())
print('郵件發送成功')
server.quit()#關閉連接
except Exception:
print(traceback.print_exce())
#讀取收件人列表數據
data=pd.read_excel(r'.\收件人列表.xlsx',encoding='gbk')
#拆分工作簿數據
workbook_path=r".\2019年下半年銷量數據表.xlsx"
split_column='省份'
file_path=r".\拆分數據\2019年下半年銷量數據表"
#讀取工作簿數據
df=pd.read_excel(workbook_path,encoding='gbk')
#將拆分列轉化為列表
split_list=list(set(df[split_column]))
#拆分工作簿
for i in split_list:
dff=df[df[split_column]==i]
#拆分后文件的完整保存路徑
filename=file_path+"——"+i+".xlsx"
#保存工作簿
dff.to_excel(filename,sheet_name=i,index=False)#i ndex=False忽略索引
print("工作簿拆分完成")
#發送郵件
for j in split_list:
my_email_from='XXXX'
my_email_to='拆分Excel表格并發送郵件'
my_email_subject=j+'2019年下半年銷量數據表.xlsx'
my_email_text='Dear all,\n\t附件為2019年下半年銷量數據表,請查收!'
my_annex_path=file_path+"——"+j+".xlsx"
my_annex_name=j+'2019年下半年銷量數據表.xlsx'
#調用編寫郵件函數
my_msg=create_email(my_email_from,my_email_to,my_email_subject,my_email_text,my_annex_path,my_annex_name)
my_sender='1049754823@qq.com'
my_password='usiaeeyfxceybaii'
my_receivers=list(data['收件人郵箱'][data['份']==j[0]
#調用發送郵件函數
send_email(my_sender,my_password,my_receivers,my_msg)
郵件發送效果如下:
注:使用第三方的SMTP服務發送郵件,需要先打開相應郵箱的SMTP服務,QQ郵箱配置方法如下圖:
使用Python SMTP發送郵件的其他方式可參考網址:
https://www.runoob.com/python/python-email.html
喜歡
分享
or
總結
以上是生活随笔為你收集整理的python拆分excel的sheet为单文件_python拆分Excel表格并发送邮件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python修改文件内容_Python批
- 下一篇: python 自动化办公 案例_pyth