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')

扫描二维码关注公众号,回复: 10812993 查看本文章

原文链接 ; 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

猜你喜欢

转载自www.cnblogs.com/zmc940317/p/12703678.html