Python 拆分表格并发送邮件
所需表格 ----- 点击下载
一 . 表拆成多个表
这个拆表代码是我能找到的最简洁的了。首先用 ExcelWriter 生成一个拆完表后的容纳工作簿,然后调用了 For 循环对某一列进行遍历,area_list 取自表格的某一列,这一列有多少种因子,就拆成多少个表,例如北京、深圳等等。最后通过循环每一个因子生成一个表,写入之前建好的工作簿中直至循环结束。
小提示:python对空格敏感,不信你把writer.save和上一行对齐看看效果是什么样的。
import pandas as pd import xlsxwriter import xlrd data = pd.read_excel(r"C:\Users\PycharmProjects\拆分自动邮件发送\chaifen.xlsx", encoding='gbk') area_list = list(set(data['店铺'])) writer = pd.ExcelWriter(r"C:\Users\PycharmProjects\拆分自动邮件发送\拆好的表1.xlsx", engine='xlsxwriter') data.to_excel(writer, sheet_name="总表", index=False) # 遍历 for j in area_list: df = data[data['店铺'] == j] df.to_excel(writer, sheet_name=j, index=False) writer.save() # 一定要加上这句代码,“拆好的表”才会显示出来
参考:https://me.csdn.net/weixin_41261833
二 . 表拆成多个工作簿
拆成多个表的关键步骤在于怎么生成表,可以用to_excel(),类比可得,拆成多个工作簿的关键步骤在于怎么生成工作簿,用ExcelWriter(),结合遍历,给每个因子都生成一个工作簿,并写入文件夹就完成了吗?不,每个工作簿不能重名,因此还需要用变量的方式给文件进行命名,f'能让{}内的功能生效。
发现此处的writer.save和上一个的差别了吗?
data = pd.read_excel(r"C:\Users\PycharmProjects\拆分自动邮件发送\chaifen.xlsx", encoding='gbk') area_list = list(set(data['店铺'])) # 遍历 for j in area_list: df = data[data['店铺'] == j] writer = pd.ExcelWriter(f'{str( j )} 拆分自动邮件发送.xlsx', engine='xlsxwriter')# 用变量进行文件名称 df.to_excel(writer, sheet_name=j, index=False) writer.save()
三 . 分别发送和抄送给多个人
建一个附件和收件人的索引,用之前给文件命名的变量j ,索引到收件人'Rec'列中'店铺'列等于 j的行。最后构建邮件发送的函数,包括收件人、抄送人、附件、正文等,从拆分到邮件整个过程不超过1分钟。
import pandas as pd import xlrd data = pd.read_excel(r"C:\Users\PycharmProjects\拆分自动邮件发送\chaifen.xlsx", encoding='gbk') data2 = pd.read_excel(r"C:\Users\PycharmProjects\拆分自动邮件发送\邮件人员清单清单.xlsx", converters={'dep2':str, 'Rec':str, 'Cc':str},encoding='gbk') area_list = list(set(data['店铺'])) # 遍历 for j in area_list: df = data[data['店铺'] == j] writer = pd.ExcelWriter(f'{str( j )} 拆分自动邮件发送.xlsx', engine='xlsxwriter') df.to_excel(writer, sheet_name=j, index=False) writer.save() # 一定要加上这句代码,“拆好的表”才会显示出来 for j in area_list: def send_mail(): outlook = win32.Dispatch('Outlook.Application') # 固定写法 mail_item = outlook.CreateItem(0) # 0: olMailItem mail_item.to = list(data2['Rec'][data2['店铺'] == j])[0] #收件人 mail_item.cc = list(data2['Cc'][data2['店铺'] == j]) [0] #抄送人 # mail.Recipients.Add(addressee) mail_item.Subject = 'Mail Test5'+'you are the best' mail_item.BodyFormat = 2 # 2: Html format mail_item.HTMLBody = ''' <H2>Hello, This is a test mail.</H2> Hello Guys. Do you want to come with us? ''' mail_item.Attachments.Add(r'C:\Users\PycharmProjects\拆分自动邮件发送'+f'\{str( j )} 拆分自动邮件发送.xlsx', 1, 1, f'{str( j )} 拆分自动邮件发送.xls') mail_item.Send() if __name__ == '__main__': send_mail() print('success')
原文链接 ; https://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650742713&idx=2&sn=e7e5c5fd3794c6f93ab112434114a9bc&chksm=bea76e6a89d0e77cbe70bd09f9b455f3a34f18e17136f4043fc9890f1e117bfc436f2ca2f93a&mpshare=1&scene=1&srcid=04152nEufQSUDfaULnBrUCvW&sharer_sharetime=1586916858293&sharer_shareid=b248fd1759cdfc201f7f4329f968c95d&key=2c650c6403245066dcd586f3a4377140303c23e77e5a9a8051cd15823fd6bea2a1f989917c8ecb714c10980c862917f4d0dc822456303eaf558cebfe3f09c09a65bb7074caa1a262181472edd3c63e8e&ascene=1&uin=MjA3MDY3NjY0Mg%3D%3D&devicetype=Windows+10&version=62080079&lang=zh_CN&exportkey=AWShgqkyKf85Z%2Bl4wKI9SNk%3D&pass_ticket=3AWrGSmsdMTUVZbRP0B6BNjimth5t6rxSv%2FP0jl2VWNJBKs%2BtAOuUMYGZMkCtXme