Python处理Excel文件、发送邮件


Excel处理 – openpyxl模块

创建文件并写入数据

import datetime
from openpyxl import Workbook

wb = Workbook() # 在内存中实例化一个excel
sheet = wb.active  # 获取当前活跃的sheet
sheet.title = "工作表1"  # 更改sheet名

# 写入单条数据
sheet["B2"] = "姓名"
sheet["C2"] = "性别"
sheet["D2"] = "身高"
# 写入多条数据,默认从有数据的下一行的第一列开始
sheet.append(["小明", "男", 178])
# 加入时间
sheet["A1"] = datetime.datetime.now().strftime("%Y-%m-%d")


wb.save("excel_test.xlsx")  # 保存excel

打开已有文件并读取

from openpyxl import Workbook, load_workbook

wb2 = load_workbook("5+3成绩2020—2021.xlsx",data_only = True)  # 加载已有文件到内存,加data_only=True,拿到的只是数据,没有公式
print(wb2.sheetnames)  # 打印所有sheet名
sheet = wb2["表2"]  # 实例化表2

# 获取单元格值
print(sheet["B5"].value)
# 获取单行单列的多个单元格值
for cell in sheet["B5:B10"]:
    print(cell[0].value)
# 按行遍历整个excel
for row in sheet:
    for cell in row:
        print(cell.value,end=",")
    print()
# 按列遍历整个excel
for column in sheet.columns:
    for cell in column:
        print(cell.value,end="")
    print()
# 遍历指定行列,从A2到E10,从第二行到第十行,每行五列
for row in sheet.iter_rows(min_row=2, max_row=10, min_col=1, max_col=5):
    for cell in row:
        print(cell.value,end=" ")
    print()


选择和删除工作表

# sheet 名称可以作为 key 进⾏索引
ws3 = wb["New Title"]
sheet = wb.worksheets[0] # 获得第1个sheet
# ⽅式⼀
wb.remove(sheet)
# ⽅式⼆
del wb[sheet]

更改表格样式

from openpyxl import Workbook, load_workbook
# 设置单元格需要导入类
from openpyxl.styles import Font, colors, Alignment

wb = load_workbook("5+3成绩2020—2021.xlsx")
sheet = wb.worksheets[1]

# 设置字体模板:微软雅黑,12号字,斜体,蓝色
myfont = Font(name="微软雅黑", size="12", italic=True, color=colors.BLUE)
sheet["B2"].font = myfont  # 更改B2的字体样式
# 设置水平居中,垂直居中
sheet["B3"].alignment = Alignment(vertical="center", horizontal="center")
# 第2行行高
sheet.row_dimensions[2].height = 40
# C列列宽
sheet.column_dimensions['C'].width = 30

wb.save("5+3成绩2020—2021.xlsx")

Python发送邮件 – smtplib模块

在这里插入图片描述
想实现发送邮件需经过以下几步:
1、登录邮件服务器
2、构造符合邮件协议规则要求的邮件内容 (email模块)
3、发送
Python对SMTP⽀持有 smtplibemail 两个模块, email 负责构造邮件,smtplib 负责发送邮件,它对smtp协议进行了简单的封装。。


纯文本邮件

import smtplib
from email.mime.text import MIMEText  # 邮件正文
from email.header import Header  # 邮件头

# 登录邮件服务器
smtp_obj = smtplib.SMTP_SSL("<发件人SMTP服务器>", <发件人SMTP端口号>)  # 发件人邮箱中的SMTP服务器,端口是25
smtp_obj.login("<发件人邮箱账号>", "<发件人邮箱SMTP服务动态密码>")  # 括号中对应的是发件人邮箱账号、邮箱密码
# smtp_obj.set_debuglevel(1) # 显示调试信息

# 设置邮件头信息
msg = MIMEText("Hello, 小哥哥", "plain", "utf-8")  # 正文内容,文本格式,utf8编码
msg["From"] = Header("来自你爸爸的问候", "utf-8")  # 发送者
msg["To"] = Header("闺女", "utf-8")  # 接收者
msg["Subject"] = Header("爸爸的问候", "utf-8")  # 主题

# 发送,发件人地址,收件人列表,消息封装后转为String
smtp_obj.sendmail("<发件人地址>", ["<收件人1地址>", "<收件人2地址>"], msg.as_string())

以QQ邮箱为例进行演示:
查找SMTP服务器和端口号
在这里插入图片描述
点击(什么是IMAP,它又是如何设置?)
在这里插入图片描述
故代码中这句话smtp_obj = smtplib.SMTP_SSL("<发件人SMTP服务器>", <发件人SMTP端口号>)
改为smtp_obj = smtplib.SMTP_SSL("smtp.qq.com", 465)
SMTP服务动态密码
在这里插入图片描述
点击生成授权码,或先关闭再重新开启SMTP服务,将邮箱账号和授权码写入代码中
发件人地址
即个人邮箱地址
收件人地址可以是个列表,填入多个人


html格式邮件

import smtplib
from email.mime.text import MIMEText  # 邮件正文
from email.header import Header  # 邮件头

# 登录邮件服务器
smtp_obj = smtplib.SMTP_SSL("<发件人SMTP服务器>", <发件人SMTP端口号>)  # 发件人邮箱中的SMTP服务器,端口是25
smtp_obj.login("<发件人邮箱账号>", "<发件人邮箱SMTP服务动态密码>")  # 括号中对应的是发件人邮箱账号、邮箱密码
# smtp_obj.set_debuglevel(1) # 显示调试信息

# 设置邮件头信息
mail_body = '''
 <h5>hello,⼩哥哥</h5>
 <p>
 ⼩哥哥, <a
href="http://wx1.sinaimg.cn/mw1024/5ff6135fgy1gdnghz2vbsg205k09ob2d.gif">这是我
的照⽚</a></p>
 </p>
'''
msg = MIMEText(mail_body, "html", "utf-8")  # 正文内容,文本格式,utf8编码
msg["From"] = Header("来自你爸爸的问候", "utf-8")  # 发送者
msg["To"] = Header("闺女", "utf-8")  # 接收者
msg["Subject"] = Header("爸爸的问候", "utf-8")  # 主题

# 发送,发件人地址,收件人列表,消息封装后转为String
smtp_obj.sendmail("<发件人地址>", ["<收件人1地址>", "<收件人2地址>"], msg.as_string())

邮件发送图片

import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
# 登录邮件服务器
smtp_obj = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465) # 发件⼈邮箱中的SMTP服务器,端⼝是25
smtp_obj.login("nami@luffycity.com", "333dsfsf#$#") # 括号中对应的是发件⼈邮箱账号、邮箱密码
smtp_obj.set_debuglevel(1) # 显示调试信息
# 设置邮件头信息
mail_body = '''
 <h5>hello,⼩哥哥</h5>
 <p>
 ⼩哥哥
 
 <p><img src="cid:image1"></p>
 </p>
'''
msg_root = MIMEMultipart('related') # 允许添加附件、图⽚等
msg_root["From"] = Header("来⾃娜美的问候","utf-8") # 发送者
msg_root["To"] = Header("有缘⼈","utf-8") # 接收者
msg_root["Subject"] = Header("娜美的信","utf-8") # 主题
# 允许添加图⽚
msgAlternative = MIMEMultipart('alternative')
msgAlternative.attach(MIMEText(mail_body, 'html', 'utf-8'))
msg_root.attach(msgAlternative) # 把邮件正⽂内容添加到msg_root⾥
# 加载图⽚,
fp = open('girl.jpg', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
# 定义图⽚ ID,在 HTML ⽂本中引⽤
msgImage.add_header('Content-ID', '<image1>')
msg_root.attach(msgImage) # 添加图⽚到msg_root对象⾥
# 发送
smtp_obj.sendmail("nami@luffycity.com", ["alex@luffycity.com",
"317828332@qq.com"], msg_root.as_string())
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值