day21
"""
https://pypi.org/ python三方库的地址
openpyxl --> 不兼容office2007以前的版本
如果要读写excel 2007以前的版本 --> xlmt/xlrd
pip install xlmt xlrt xlutils 老版本的安装使用
aaa.xlsx --> aaa.rar --> 解归档 --> folder
"""
1.办公自动化
# 读取excel文件
import openpyxl
from openpyxl.styles import Alignment, Font, Border, Side
from openpyxl.worksheet.worksheet import Worksheet
from openpyxl.cell.cell import Cell
from datetime import datetime
from openpyxl.chart import LineChart, Reference
# isinstance() - 和type()一样,判断类型
def display(value, delim=' '):
if isinstance(value, float):
print(f'{value:10.2f}', end=delim)
elif isinstance(value, datetime):
print(value.strftime('%Y/%m/%d'), end=delim)
elif isinstance(value, int):
print(f'{value:>10d}')
else:
print(value, end=delim)
def main():
# 1.加载工作簿(通过load_workbook函数加载excel工作簿获得Workbook对象)
workbook = openpyxl.load_workbook(r'resources\阿里巴巴2020年股票数据.xlsx')
# 2.获取工作表(获取Workbook对象,工作表)
# 1)获取默认的工作表
# sheet = workbook.active
# 2)获取第一个工作表
# sheet = workbook.worksheets[0]
"""
p - property - 属性
m - method - 方法
"""
# 3)根据给出的表名获取工作表
sheet = wokbook['Sheet1'] # type: Worksheet
# 3.获取工作表的属性
# 1)获取工作表的行数和列数
print(sheet.max_row, sheet.max_column)
# 2)获取工作表的范围
print(sheet.dimensions)
# 4.操作单元格
# 1)获取单元格的值的两种方式
# 技巧:代码后面的类型注释可以让Pycharm在后面的代码中为sheet对象提示属性和方法
cell = sheet['E5'] # type: Cell
# cell = sheet.cell(5, 5)
print(cell.value)
# 2)更改单元格的值
#第一种
cell.value = 200
# 第二种
sheet.cell(5, 5, 200)
# 循环遍历所有单元格
for row in range(2, sheet.max_row + 1):
for col in range(1, sheet.max_column + 1):
value = sheet.cell(row, col).value
display(value)
print()
# 6.公式计算
# sheet['E256'] = '=average(e2:e255)'
# sheet['F256'] = '=sum(f2:f255)'
cell = sheet['E256']
cell.value = '我爱你中国'
# 对齐方式(horizontal : 水平(left/right), vertical: 垂直(top/bottom))
cell.alignment = Alignment(horizontal='center', vertical='center')
#字体(name:系统上有的字体的名字)
cell.font = Font(name='华文楷体', size=20, color='330099')
# 边框
side = Side(color='ff6600', style='mediumDashed')
cell.border = Border(left=side, right=side, top=side, bottom=side)
# 行高和列宽(获取对应的行再指定行高,同理,列也一样)
sheet.row_dimensions[256].hight = 50
sheet.column_dimensions['E'].width = 35
# 7.图表操作(如折线图)
# 绘制折线图
# 创建图表对象
c1 = LineChart()
c1.title = '一月份收盘价和开盘价'
c1.add_data(data, titles_from_data=True)
# 设置横轴
cats = Reference(sheet, min_col=4, min_row=1, max_col=5, max_row=23)
c1.set_categories(cats)
# 给数据系列设置样式
s1 = c1.series[0]
s1.marker.symbol = 'triangle'
# 填充色
s1.marker.graphicalProperties.solidFfill='CC0099'
# 设置边框色
s1.marker.graphicalProperties.line.solidFill = '0000ff'
# 光滑曲线
s1.smooth = True
# 将图表添加到工作表
sheet.add_chart(c1, 'A258')
# 保存工作簿
workbook.save(r'resources\阿里巴巴2020年股票数据.xlsx')
if __name__ == '__main__':
main()
2.用python发送邮件
"""
HTTP
邮件服务器 --> 自己搭建 / 买三方邮件服务
SMTP --> Simple Mail Transfer Protocol - 简单邮件传输协议 --> 跟你的邮件服务器进行网络通信
Python标准库已经对SMTP进行了封装,我们主要通过创建对象,给对象发消息的方式就可以完成邮件的发送
smtplib模块 --> SMTP_SSL --> login() / sendmail() /quit()
POP3 --> Post Office Protocol version 3
IMAP --> Internet Mail Access Protocol
邮件服务器 : smtp.qq.com 端口 :465 / 25
账号:邮箱账号(发件人)
授权码
MIME --> Multi-purpose Internet Mail Extension - 多用途Internet邮件扩展
--> text / html - 页面
--> image/png
--> image/gif
--> audio/mp3
--> video/mp4
MIMEMultipart --> attach --> 添加文本、附件等其他内容
MIMEText --> 可以用来封装文本内容、也可以封装二进制数据(需要经过BASE64编码处理)
国内短信平台注册账号:螺丝帽、SendCloud、云片短信、互亿无线、网易云信
"""
# 创建SMTP_SSL对象(host=邮件服务器地址,port=安全的SMTP默认465端口)
smtp_obj = smtplib.SMTP_SSL(host='smtp.qq.com', port=465)
# 1.登录授权 - smtp_obj.login(用户名, 授权码)
smtp_obj.login('xxxxx@qq.com', 'vrelfxqzeruwcjfb')
content = """在前⾯的课程中,我们已经教会⼤家如何⽤Python程序⾃动的⽣成Excel、Word、PDF⽂档,接下来我们还可以更
进⼀步,就是通过邮件将⽣成好的⽂档发送给指定的收件⼈,然后⽤短信告知对⽅我们发出了邮件。这些事情利⽤Python程序也可以轻松愉快的解决。"""
# 邮件的主体内容通过MIMEText对象构造
mine_text = MIMEText(content, 'plain', 'utf-8') # plain纯文本文件
mime_text['From'] = 'xxxxxx@qq.com' # 邮件发送者
mime_text['To'] = 'xxxxxxx@qq.com;xxxxxxx@qq.com'
# mime_text['Cc'] = '...;...;...' # 抄送人
mime_text['Subject'] = 'Python办公自动化学习内容' # 邮件主题
# 2.发送邮件
# sendmail方法的三个重要参数
# from_addr - 发件人。跟上面的From保持一致
# to_addrs - 收件人,可以是多个,跟上面的To保持一致
# msg - 邮件内容
smtp_obj.sendmail(
from_addr='xxxxxx@qq.com',
to_addrs=['xxxxxx@qq.com','xxxxxx@qq.com'],
msg=mime_text.as_string()
)
# 3.结束会话
smtp_obj.quit()
# 邮件发送(添加附件)
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
smtp_obj = smtplib.SMTP_SSL(host='smtp.qq.com', port=465)
smtp_obj.login('xxxxxx@qq.com', 'vrelfxqzeruwcjfb')
content = """在前⾯的课程中,我们已经教会⼤家如何⽤Python程序⾃动的⽣成Excel、Word、PDF⽂档,接下来我们还可以更
进⼀步,就是通过邮件将⽣成好的⽂档发送给指定的收件⼈,然后⽤短信告知对⽅我们发出了邮件。这些事情利⽤
Python程序也可以轻松愉快的解决。"""
# 邮件的主体内容通过MIMEText对象构造
m_part = MIMEMultipart()
m_part['From'] = 'xxxxxx@qq.com'
m_part['To'] = 'xxxxxxx@qq.com;xxxxxx@qq.com'
m_part['Subject'] = 'python办公自动化学习内容'
# 文件内容
mime_text = MIMEText(content, 'plain', 'utf-8')
m_part.attach(mime_text)
with open(r'resources\用python发送邮件和短信.pdf', 'rb') as file:
pdf_file = MIMEText(file.read(), 'base64', 'utf-8')
# 设置内容类型
pdf_file['content-type'] = 'application/pdf'
# 设置内容的处置方式(可下载的附件)
pdf_file['content-disposition'] = 'attachment; filename="aaa.pdf"'
m_part.attach(pdf_file)
with open(r'resources\阿里巴巴2020年股票数据.xlsx', 'rb') as file:
excel_file = MIMEText(file.read(), 'base64', 'utf-8')
excel_file['content-type'] = 'application/vnd.ms-excel'
excel_file['content-disposition'] = 'attachment; filename="alibaba.xlsx"'
m_part.attach(excel_file)
smtp_obj.sendmail(
from_addr='xxxxxx@qq.com',
to_addrs=['xxxxxx@qq.com', 'xxxxxx@qq.com'],
msg=m_part.as_string()
)
smtp_obj.quit()