day21-办公自动化:利用Python发邮件

Excel中绘制图表

下载三方库openpyxl

pip install openpyxl
from datetime import datetime

from openpyxl
from openpyxl.chart import Reference, LineChart
from openpyxl.cell.cell import cell
from openpyxl.styles import Alignment, Front, Border, Side


def display(value, delim=''):
    if isinstance(value, float):
        print(f'{value:>10.2f}', end=delim)
    elif isinstance(value, int):
        print(f'{value:>10}', end=delim)
    elif isinstance(value, datetime):
        print(value.strftime('%Y年%m月%d日'), end=delim)
    else:
        print(value, end=delim)


def main():
    # 1.加载工作表
    workbook = openpyxl.load_workbook('阿里巴巴2020年股票数据.xlsx')
    
    # 2.获取工作表	代码后面的类型注释可以让PyCharm在后面的代码中提示出属性和方法
    sheet = workbook['股票数据']  # type: Worksheet
    
    # 3.获取工作表的属性
    print(sheet.max_row, sheet.max_column)		# 255 7
    print(sheet.dimensions)		# A1:G255   - 	单元格的范围
    
    # 4.操作单元格
    cell = sheet['E5']	# type: Cell
    cell1 = sheet.cell(5, 5)
    print(cell.value, cell1.value)	# 216.639999389648 216.639999389648
    
    # 5.循环遍历所有单元格
    for row in range(2, sheet.max_row + 1):
        for col in range(2, sheet.max_column + 1):
            display(sheet.cell(row, col).value)
        print()
        
    # 6.公式计算
    # sheet['D256'] = '=sum(d2:d255)'
    # sheet['E256'] = '=average(e2:e255)'
    # sheet['F256'] = '=sum(f2:f255)'
    cell = sheet['E256']
    cell.value = '我爱你中国'
    
    # 对齐方式
    cell.alignment = Alignment(horizontal='center', vertical='center')
    # 字体
    cell.font = Font(name='ArialUnicodeMS', size=20, color='330099')
    # 边框
    side = Side(color = 'ff6600', style = 'double')
    cell.border = Border(left=side, right=side, top=side, bootom=side)
    # 行高
    sheet.row_dimensions[256].height = 50
    sheet.coloumn_cimensions['E'].width = 35
    
    # 绘制图表
    c1 = LineChart()
    c1.title = '一月份收盘价和开盘价'
    c1.style = 13
    c1.y_axis.title = '价格'
    c1.x_axis.title = '日期'
    # 绘图添加数据
    data = Reference(sheet, min_col=4, min_row=1, max_row=23)
    c1.add_data(data, titles_from_data=True)
    # 设置横轴
    cats = Reference(sheet, min_col=1, min_row=2, max_row=23)
    c1.set_categories(cats)
    # 给数据系列设置样式
    s1 = c1.sheet[0]
    s1.maker.symbol = 'circle'
    s1.maker.graphicalProperties.solidFill = 'ff0000'
    s1.maker.graphicalProperties.line.solidFill = '0000ff'
    s1.smooth = True
    # 将图添加到工作表
    sheet.add_chart(c1, 'A258')
    
    # 7.保存工作簿
    workbook.save('阿里巴巴2020年股票数据.xlsx')
    

if __name__ == '__main__':
    main()

在这里插入图片描述
在这里插入图片描述

办公自动化 —> 利用Python发邮件

  • 邮件服务器 -》 自己搭建 / 买三方服务器

    SMTP:Simple Mail Transfer Protocol -> 跟你的邮件服务器进行网络通信

    Python标准库已经对SMTP进行了封装,我们主要通过创建对象,给对象发消息的方式就可以发送邮件

    smtplib模块 —》SMTP_SSL —》 login() / sendmail() / quit()

    邮件服务器:smtp.163.com

    端口号:465 / 25

MIME —> Multi-purpose Internet Mail Extension
—> text/html
—> image/png
—> image/gif
—> audio/mp3
—> video/mp4
—> application/pdf

MIMEMultipart —> attach —> 添加文本、附件等其他内容
MIMEText —> 可以封装文本内容,也可以封装二进制数据(需要经过BASE64编码处理)

import smtplib

# 创建SMYP_SSL对象
smtp_obj = smtplib.SMTP_SSL(host='smtp.163.com', port=465)

# 1.登录授权,如果没有开启SMTP服务,调用login方法会直接报SMTPAuthenticationError错误
smtp_obj.login('lijunbo_k@163.com', 'TKOBFAKALTBDJAUB') # 授权码
content = """
	在前⾯的课程中,我们已经教会⼤家如何⽤Python程序⾃动的⽣成Excel、Word、PDF⽂档,接下来我们还可以更进⼀步,就是通过邮件将⽣成好的⽂档发送给指定的收件⼈,然后⽤短信告知对⽅我们发出了邮件。这些事情利⽤Python程序也可以轻松愉快的解决。
"""
m_part = MIMEMultipart()
m_part['From'] = 'lijunbo_k@163.com'
m_part['To'] = '1248094500@qq.com'
m_part['Subject'] = 'Python办公自动化学习内容'

# 添加附件
mime_text = MIMEText(content, 'plain', 'utf-8')
m_part.attach(mime_text)

with open('Base64.pdf', 'rb') as file:
    pdf_file = MIMEText(file.read(), 'base64', 'utf-8')
    pdf_file['content-type'] = 'application/pdf'	 # application/cotet-stream
    # 设置内容的处置方式(可下载的附件)
    pdf_file['contnet-disposition'] = 'attachment; filename="aaa.pdf"'
    m_part.attach(pdf_file)
    
with open('阿里巴巴2020股票数据.xlsx', 'rb') as file:
    excel_file = MIMEText(file.read(), 'base64', 'utf-8')
    excel_file['content-type'] = 'application/vnd.ms-excel'# application/cotet-stream
    excel_file['content-disposition'] = 'attachment; filename="alibaba-sock.xlsx"'
    m_part.attach(excel_file)

# 2.发送邮件
smtp_obj.sendmail(
	from_addr='lijunbo_k@163.com',
    to_addrs='1248094500@qq.com',
    msg=m_part.as_string()
)

# 3.结束会话
smtp_obj.quit() # smtp_obj.close()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值