Python自动化
Excel处理模块
打开文件:
-
创建:
from openpyxl import Workbook # 实例化 wb = Workbook() # 获取当前active的sheet sheet = wb.active print(sheet.title) sheet.title = "Salary luffy"
-
打开已有文件:
from openpyxl import load_workbook wb2 = load_workbook("文件名.xlsx")
写数据
#方式一:数据可以直接分配到单元格中(可以输入公式)
sheet["C5"] = "hello"
sheet["C7"] = "hi"
# 方式二:可以附加行,从第一列开始附加(从最下方空白处)
sheet.append([1,2,3])
#方式三:Python类型会被自动转换
sheet["A3"] = datetime.datetime.now().strfrime("%Y-%m-%d")
选择表
#sheet 名称可以作为key进行索引
ws3 = wb["New Title"]
ws4 = wb.get_sheet_by_name("New Title")
#打印所有的sheet
print(wb.get_sheet_name())
sheet = wb.worksheets[0] # 获取第一个sheet
保存表
wb.sabe("文件名称.xlsx")
遍历表
按行遍历
for row in sheet:
for cell in row:
print(cell.value, end=",")
print()
按列遍历
for column in sheet.columns:
for cell in column:
print(cell.value, end=",")
print()
遍历指定行和列
# 从第二行开始到第五行,每行打印五列
for row in sheet.iter_rows(min_row = 2,max_row = 5, max_col = 5):
for cell in row:
print(cell.value,end=",")
print()
遍历指定几列的数据
for col in sheet.iter_cols(min_col = 2, max_col = 5):
for i in col:
print(i.value,end = "")
print()
删除工作表
we.remove(sheet)
def wb[sheet]
设置表的格式
需要导入的类:
from openpyxl.styles import Font,colors,Alignment
字体
下面的代码指定了等线24号,加粗斜体,字体颜色红色。直接使用cell的font属性,将Font对象赋值给它。
bol_itatic_24_font = Font(name='等线',size=24,italic=True,color=colors.RED,bold=True) #声明样式
sheet [ 'A1 ' ].font = bold_itatic_24_font # 给单元格设置样式
对齐方式
也是直接使用cell的属性aligment,这里指定垂直居中和水平居中。除了center,还可以使用
right、left等等参数。
#设置B1中的数据垂直居中和水平居中
sheet[ 'B1 ' ].alignment = Alignment (horizontal='center ', vertical='center')
设置行高&列宽
#第2行行高
sheet.row_dimensions[ 2 ].height = 40#c列列宽
sheet.column_dimensions[ 'C' ].width = 30
使用python发动邮件
邮件发送smtplib(邮件授权码:uxqgzxwrzjimebge)
SMTP(Simple Mail Transfer Protocol )简单邮件传输协议,它是一组用于由源地址到目的地址发送邮件的规则,由他控制信件的中转方式。
想实现发送邮件需要经过以下几步
- 登录邮件服务器
- 构造符合邮件协议规则要求的邮件内容
- 发送
Python对SMTP支持有smtplib和email两个模块,email负责构造邮件, smtplib负责发送邮件,他对tmep协议进行了简单的封装
- 发送纯文本文件
import smtplib
from email.mime.text import MIMEText # 邮件正文
from email.header import Header # 邮件头
# 发件人邮箱中的smtp服务器,端口是25
stmp_obj = smtplib.SMTP_SSL("smtp.qq.com", 465)
# 括号中对应的是发件人邮箱账号 和 邮箱授权码
stmp_obj.login("2152889763@qq.com", "uxqgzxwrzjimebge")
# stmp_obj.set_debuglevel(1)
# 设置邮件头信息:
# 正文
msg = MIMEText("Hello, I'm from England. What's your name,Can I be your pen pal", "plain", "utf-8")
# 发送者
msg["From"] = Header("Dave", "utf-8")
# 接收者
msg["To"] = Header("Mr.zhang", "utf-8")
# 主题
msg["Subject"] = Header("Dave", "utf-8")
# 接收人
Receiver = ["2622599434@qq.com", "2174489554@qq.com"]
# 发送
stmp_obj.sendmail("2152889763@qq.com", Receiver, msg=msg.as_string())
print("OVER!")
-
发送html文件:
mail_body = ''' <h5>你好啊!</h5> <p> <a href="网址">这是我新创建的网址,要来看看吗</a> </P> ''' # 正文 msg = MIMEText(mail_body, "html", "utf-8")
-
添加图片:
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服务器,端口是25 smtp_obj = smtplib.SMTP_SSL ("smtp.exmail.qq.com", 465) #括号中对应的是发件人邮箱账号、邮箱授权码 smtp_obj.login ("nami@luffycity.com","333dsfsf#$#") #显示调试信息 smtp_obj.set_debuglevel(1) #设置邮件头信息 mail_body =''' <h5>hello</h5> <p> 你好 <p><img src="cid :image1"> </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("image.jpg", 'rb') msgImage = MIMEImage(fp.read()) fp.close() # 定义图片 ID,在html, 文本中的引用 msgImage.add_header("Content-ID", "<image>") msg_root.attach(msgImage) # 添加图片到msg_root 对象中 # 发送 smtp_obj.sendmail("发件人邮箱", "收件人邮箱", msg=msg_root.as_string())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构