做报表自动化 python DataFrame内容写入excel并发送至邮箱代码分享

准备工作

1.在代码文件同级目录下建好excel 如xxx报表
2.报表里面建好代码里面要用的相应的sheet,sheet空不空都无所谓,如daoqi
3.再建好要展示的sheet,并做好相应的变量映射 ,如=daoqi!a2,最后调整好格式,如展示数据需要百分比方式显示,单元格颜色等

下面贴代码

#导库 ,没有的自行安装
import pandas as pd
import numpy as np
import pymysql
import time
from datetime import datetime, timedelta
import json
import pymongo
import pymysql
import pandas as pd
import numpy as np
from sshtunnel import SSHTunnelForwarder
import openpyxl
import os
import smtplib
import xlrd
import email
import email.mime.text
import email.mime.multipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import collections
from collections import OrderedDict
import warnings
warnings.filterwarnings("ignore")
#假设得到一个daoqi的DataFrame
sql="""
"""
daoqi==pd.read_sql_query(sql,conn)
#定义写入函数
def write_to_sheet(wb,sheet_name,df):
    ws=wb[sheet_name]
    columns=list(df.columns)
    for col in range(len(columns)):
        ws.cell(1,col+1,columns[col])
    m, n = df.shape
    values = df.values
    for row in range(m):
        for col in range(n):
            value = values[row, col]
            ws.cell(row+2, col+1, value)
    return wb
#打开xxx报表
today = datetime.today().strftime('%Y%m%d')
wb = openpyxl.load_workbook('xxx报表.xlsx')
#写入sheet
write_to_sheet(wb,'daoqi',daoqi)
#以今天为例生成名为:'xxx报表20210729'
wb.save('xxx报表%s.xlsx'%today)
def CutHour(time):
    """截取时分秒"""
    new_time = str(time)
    hour = new_time[11:19]
    return "".join(hour)
#%%

def start_send_mail():
    today = datetime.today().strftime('%Y%m%d')
    print("开始处理数据")
    #导入报表代码
    #读取数据
    
    #配置邮件
    msg =  email.mime.multipart.MIMEMultipart()
#这里的协议以自己用的邮箱为准
    smtp = smtplib.SMTP_SSL('smtp.exmail.qq.com',465)    
    msg['from'] = 'xxx.com'         #发件人邮箱
    msg['subject'] = 'xxx报表%s'%(today)  #主题名称
    
    #2.4邮件附件
    path_list=['xxx报表%s.xlsx'%(today)]
    for File_path in path_list:
        xlsxpart = MIMEApplication(open(File_path, 'rb').read())
        # filename表示邮件中显示的附件名
        xlsxpart.add_header('Content-Disposition','attachment',filename = '%s'%(File_path.split('/')[-1]))
        msg.attach(xlsxpart)
    #3.发件人
    smtp.login('xxx.com','授权码')
    smtp.sendmail('xxx.com',['xxx.com'],msg.as_string())#发件人,收件人
    smtp.sendmail('xxx.com',['2477627527@qq.com', 'xxx.com'],msg.as_string())#发件人,收件人
    smtp.quit()
    time.sleep(2)
    print("发送完成")
start_send_mail()

#这里的收件人可以写多人列表,不过一般都是发给自己的邮箱,再从自己邮箱获取报表后再将要展示的部分进行截图并附件转发
#截图功能实现较为复杂以后有空再写文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值