import datetime
import os
 
import xlsxwriter
import smtplib
from os.path import basename
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formatdate
 
 
def write_data_to_excel(file_name, data):
    wbk = xlsxwriter.Workbook(file_name)
    sheet_name = 'sheet1'
    sheet = wbk.add_worksheet(sheet_name)
    header = [u'a', u'b', u'c', u'd', u'e', u'f', u'g']
    h = 0
    for each_header in header:
        sheet.write(0, h, each_header)
        h += 1
 
    for i in range(len(data)):
        for j in range(len(data[i])):
            if j == 0:
                sheet.write(i + 1, j, u'%s' % data[i]['a'])
            if j == 1:
                sheet.write(i + 1, j, u'%s' % data[i]['b'])
            if j == 2:
                sheet.write(i + 1, j, u'%s' % data[i]['c'])
            if j == 3:
                sheet.write(i + 1, j, u'%s' % data[i]['d'])
            if j == 4:
                sheet.write(i + 1, j, u'%s' % data[i]['e'])
            if j == 5:
                sheet.write(i + 1, j, u'%s' % data[i]['f'])
            if j == 6:
                sheet.write(i + 1, j, u'%s' % data[i]['g'])
 
    wbk.close()
 
 
def send_email(file_name):
    msg = MIMEMultipart()
    msg['From'] = "xxx@xxx.com"
    msg['To'] = "xxx@xxx.com"
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = "Test email with attachment"
    text = "Test text"
 
    msg.attach(MIMEText(text))
 
    with open(file_name, "rb") as fil:
        part = MIMEApplication(
            fil.read(),
            Name=basename(file_name)
        )
    part['Content-Disposition'] = 'attachment; filename="%s"' % basename(file_name)
    msg.attach(part)
 
    smtp = smtplib.SMTP('xxx_server')
    smtp.sendmail("xxx@xxx.com", "xxx@xxx.com", msg.as_string())
    smtp.close()
 
 
if __name__ == '__main__':
    from_date_str = '2018-01-10 00:00:00'
    to_date_str = '2018-01-15 00:00:00'
    today_date = datetime.datetime.now().strftime('%Y%m%d')
    file_name = 'prefix-' + str(today_date) + '.xlsx'
    data = get_export_data(from_date_str, to_date_str)
    write_data_to_excel(file_name, data)
    send_email(file_name)
    os.remove(file_name)

参考:https://blog.csdn.net/kangkangwanwan/article/details/84778984