课程名称: Python办公自动化
课程章节:第4章 xlsxwriter生成图表
课程讲师: 离岛
课程内容:
chart=wb.add_chart({'type':'line'}) #折线图, 可以使用column表示柱状图 chart.set_title({'name':'第一季度销售统计'}) #X Y 描述信息,这里也可以设置字体的样式 chart.set_x_axis({'name':'月份'}) chart.set_y_axis({'name':'销售额'}) #数据 chart.add_series({ 'name':'预期销售额', 'categories':'=newsheet!$A$5:$A$7', 'values':['newsheet',4,1,6,1] }) chart.add_series({ 'name':'实际销售额', 'categories':'=newsheet!$A$5:$A$7', 'values':['newsheet',4,2,6,2], #起始行,终止列。 'data_labels':{'value':True} #显示柱状图上数据 }) sheet.insert_chart('A23',chart)#写入
最终的结果如下图
具体的实现步骤如下
前两个步骤,前两个章节已经表示学习到了,主要是第三个步骤, 其中smtplib模块已经在python2.X、 3.X合入该模块
import xlsxwriter import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication #1.读取 data=xlrd.open_workbook('info.xlsx') classinfo=[] for sheet in data.sheets(): dict={'name':sheet.name,'avgsalary':0}#班级信息 sum=0 #存储薪资 for i in range(sheet.nrows): if i>1: sum+=float(sheet.cell(i,5).value) #得到薪资数据 dict['avgsalary']=sum/(sheet.nrows-2) classinfo.append(dict) print(classinfo) #2.写入excle workbook=xlsxwriter.Workbook('newinfo.xlsx') sheet=workbook.add_worksheet()#创建工作表 #写入班级数据 nameinfo=[] salaryinfo=[] for item in classinfo: nameinfo.append(item['name']) salaryinfo.append(item['avgsalary']) sheet.write_column('A1',nameinfo) sheet.write_column('B1',salaryinfo) #写入图表 chart=workbook.add_chart({'type':'column'}) #标题 chart.set_title({'name':'平均就业薪资'}) #数据源 chart.add_series({ 'name':'班级', 'categories':'=Sheet1!$A$1:$A$3', 'values':'=Sheet1!$B$1:$B$3', }) sheet.insert_chart('A7',chart) workbook.close() #3.发送邮件 host_server='smtp.qq.com' #主机地址,需要先打开邮箱内的smtp开关,初次打开时会提供授权码,乳腺 #发件人邮箱 sender="XXXXXXX" #使用个人邮箱即可 #发件人邮箱密码、授权码 code="xxxxxx" #收件人 user1="XXXXXXXXXX" #准备邮件数据 #邮件标题 mail_title="!!!1月份平均就业薪资" #内容 mail_content="1月份平均就业薪资,请具体查看附件" #构建附件 attachment=MIMEApplication(open('newinfo.xlsx','rb').read()) #添加标识,最后是邮箱里看到的附件名字 attachment.add_header('Content-Disposition','attachment',filename='data.xlsx') #SMTP smtp=smtplib.SMTP(host_server) #登录 smtp.login(sender,code) #发送 msg=MIMEMultipart()#带附件的实例 msg['Subject']=mail_title msg['From']=sender msg['To']=user1 msg.attach(MIMEText(mail_content)) msg.attach(attachment) smtp.sendmail(sender,user1,msg.as_string())
需要注意导入的email.mime是smtplib的拓展,可以设置文本和添加附件
保证SMTP处于开启状态,第一次开启会要求用户发送指定的短信给指定地方,到时候会返回一个授权码
课程收获:
本节内容主要是邮箱的发送过程中,各种参数的构建和使用,其中涉及到SMTP的内容,需要进行学习和熟悉的。