课程名称: 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的内容,需要进行学习和熟悉的。
随时随地看视频