Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python入门之后须掌握的知识点(excel文件处理+邮件发送+实战:批量化发工资条)【二】

python入门之后须掌握的知识点(excel文件处理+邮件发送+实战:批量化发工资条)【二】

作者头像
汀丶人工智能
发布于 2022-12-21 08:08:20
发布于 2022-12-21 08:08:20
65600
代码可运行
举报
文章被收录于专栏:NLP/KGNLP/KG
运行总次数:0
代码可运行

相关文章:

python处理Excel实现自动化办公教学(含实战)【一】

python处理Excel实现自动化办公教学(含实战)【二】

python处理Excel实现自动化办公教学(数据筛选、公式操作、单元格拆分合并、冻结窗口、图表绘制等)【三】

python入门之后须掌握的知识点(模块化编程、时间模块)【一】

python入门之后须掌握的知识点(excel文件处理+邮件发送+实战:批量化发工资条)【二】

码源:

发邮件处理码源excel.zip-机器学习文档类资源-CSDN下载

1.excel处理

1.1 创建文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from openpyxl import Workbook
# 实例例化
wb = Workbook()
# 获取当前active的sheet
ws = wb.active
print(sheet.title) # 打印sheet表名
sheet.title = "salary luffy" # 改sheet 名

打开已有文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('⽂文件名称.xlsx')

写入数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ⽅方式⼀一:数据可以直接分配到单元格中(可以输⼊入公式)
sheet["C5"] = "Hello ⾦金金⻆角⼤大王"
sheet["C7"] = "Hello ⾦金金⻆角⼤大王2"
# ⽅方式⼆二:可以附加⾏行行,从第⼀一列列开始附加(从最下⽅方空⽩白处,最左开始)(可以输⼊入多⾏行行)
sheet.append([1, 2, 3])
# ⽅方式三: Python 类型会被⾃自动转换
sheet['A3'] = datetime.datetime.now().strftime("%Y-%m-%d")

选择表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# sheet 名称可以作为 key 进⾏行行索引
ws3 = wb["New Title"]
ws4 = wb.get_sheet_by_name("New Title")
print(wb.get_sheet_names()) # 打印所有的sheet
sheet = wb.worksheets[0] # 获得第1个sheet

 保存表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wb.save('⽂文件名称.xlsx')

 1.2 遍历表数据

按行遍历

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for row in sheet: # 循环获取表数据
for cell in row: # 循环获取每个单元格数据
print(cell.value, end=",")
print()

按列遍历

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# A1, A2, A3这样的顺序
for column in sheet.columns:
for cell in column:
print(cell.value,end=",")
print()

遍历指定行&列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 从第2⾏开始⾄至第5行,每行打印5for row in sheet.iter_rows(min_row=2,max_row=5,max_col=5):
for cell in row:
print(cell.value,end=",")
print()

遍历指定⼏列的数据 取得第2-第5列的数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for col in sheet.iter_cols(min_col=2,max_col=5,):
for i in col:
print(i.value,end=",")
print()

删除工作表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 方式⼀
wb.remove(sheet)
# 方式⼆
del wb[sheet]

1.3设置单元格样式

需导入的类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from openpyxl.styles import Font, colors, Alignment

二、字体 下⾯面的代码指定了了等线24号,加粗斜体,字体颜⾊色红⾊色。直接使⽤用cell的font属性,将Font对象赋值给它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bold_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等参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 设置B1中的数据垂直居中和⽔水平居中
sheet['B1'].alignment = Alignment(horizontal='center', vertical='center')

设置行高&列宽

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 第2⾏高
sheet.row_dimensions[2].height = 40
# C列列列列宽
sheet.column_dimensions['C'].width = 30

2.发送邮件smtplib

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

2.1 发送一封最简单的信语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import smtplib
from email.mime.text import MIMEText # 邮件正⽂文
from email.header import Header # 邮件头
# 登录邮件服务器器
smtp_obj = smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件⼈人邮箱中的SMTP服务器,端⼝口是25
smtp_obj.login("xxxx@qq.com", "密码") # 括号中对应的是发件⼈人邮箱账号、邮箱密码
#smtp_obj.set_debuglevel(1) # 显示调试信息
# 设置邮件头信息
msg = MIMEText("Hello, ", "plain", "utf-8") #plain文本格式
msg["From"] = Header("来⾃自娜美的问候","utf-8") # 发送者
msg["To"] = Header("有缘⼈人","utf-8") # 接收者
msg["Subject"] = Header("娜美的信","utf-8") # 主题
# 发送
smtp_obj.sendmail("xxxxx@qq.com", ["7894565595@qq.com","1234565595@qq.com"], msg.as_string())
print(f"成功发送到")

个人QQ号申请ssl设置如下:

 得到授权码填写一下即可

2.2 发送HTML格式的邮件

只需要改一下 MIMEText() 第2个参数为 html 就可以

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 设置邮件头信息
mail_body = '''
<h5>hello,</h5>
<p>
hello.. <a
href="http://wx1.sinaimg.cn/mw1024/5ff6135fgy1gdnghz2vbsg205k09ob2d.gif">这是我
的照⽚片</a></p>
</p>
'''
msg = MIMEText(mail_body, "html", "utf-8")

2.3 在HTML⽂文本中插⼊入图⽚

下面是企业qq下发送

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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>
hello..
<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())

更多Python3 SMTP发送邮件参考下面链接:

Python3 SMTP发送邮件 | 菜鸟教程Python3 SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。 Python创建 SMTP 对象语法如下: import smtplib smtpObj = smtplib.SMTP( [host [..

https://www.runoob.com/python3/python3-smtp.html

3.实战批量化发工资条

先上简易版的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from openpyxl import load_workbook
import smtplib
from email.mime.text import MIMEText # 邮件正⽂文
from email.header import Header # 邮件头
#加载excel文件
wb = load_workbook ("工资.xlsx")
sheet = wb.active

# 登录邮件服务器器

smtp_obj = smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件⼈人邮箱中的SMTP服务器,端⼝口是25
smtp_obj.login("8xxx@qq.com", "xxx") # 括号中对应的是发件⼈人邮箱账号、邮箱密码

#循环excel
for row in sheet.iter_rows(min_row=2,max_row=3):
    row_text=""
    for cell in row:
        # print(cell.value,end=",")
        row_text+=f"{cell.value}"
    name = row[2]
    staff_email=row[1].value
    print(staff_email,name.value)
    

    mail_body = '''
        <h3>{name.value} ,你好:</h3>
        <p>请查收你2022-05月的工资条
        {row_text}
        </p>|
    '''
    msg = MIMEText(mail_body,"html", "utf-8") #plain文本格式
    msg["From"] = Header("人事部","utf-8") # 发送者
    msg["To"] = Header("员工","utf-8") # 接收者
    msg["Subject"] = Header("工资条","utf-8") # 主题
    smtp_obj.sendmail("xxxxx5@qq.com", [staff_email,], msg.as_string())
    print(f"成功发送到{staff_email} to {name.value}.")

其次是生成格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
    <table border=" 1px solid black">
        <tr>
            <td>name</td>
            <td>age</td>
            <td>sex</td>
        </tr>
        <tr>
            <td>ming</td>
            <td>22</td>
            <td></td>
        </tr>
    <!-- <h1>我的第一个标题</h1>
    <p>我的第一个段落。</p> -->
    </table> 
</body>
</html>

 将html格式写入python文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from openpyxl import load_workbook
import smtplib
from email.mime.text import MIMEText # 邮件正⽂文
from email.header import Header # 邮件头
#加载excel文件
wb = load_workbook ("工资.xlsx")
sheet = wb.active

# 登录邮件服务器器

smtp_obj = smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件⼈人邮箱中的SMTP服务器,端⼝口是25
smtp_obj.login("8xxxxx75@qq.com", "xxxxxbgg") # 括号中对应的是发件⼈人邮箱账号、邮箱密码

#循环excel
for row in sheet.iter_rows(min_row=2,max_row=2):
    row_text="<tr>" 
    for cell in row:
        # print(cell.value,end=",")
        row_text+=f"<td>{cell.value}</td>"
    row_text+="</tr>"   
    name = row[2]
    staff_email=row[1].value
    print(staff_email,name.value)
    

    mail_body= '''
        <h3> {name.value},你好: </h3>
        <p>请查收你2022-05月的工资条 </p>
        <table border="1px solid black">
        {row_text}
        </table> 
    '''
    print(mail_body)
    msg = MIMEText(mail_body,"html", "utf-8") #plain文本格式
    msg["From"] = Header("人事部","utf-8") # 发送者
    msg["To"] = Header("员工","utf-8") # 接收者
    msg["Subject"] = Header("工资条","utf-8") # 主题
    smtp_obj.sendmail("8xxxx5@qq.com", [staff_email], msg.as_string())
    print(f"成功发送到{staff_email} to {name.value}.")

 但是会发现一个问题:只会把公式读取过来,没有读数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wb = load_workbook ("工资.xlsx",data_only=True)

修改成上面即可

 下面保存表头

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from openpyxl import load_workbook
import openpyxl
import smtplib
from email.mime.text import MIMEText # 邮件正⽂文
from email.header import Header # 邮件头
#加载excel文件
wb = load_workbook ("工资.xlsx",data_only=True)
sheet = wb.active

# 登录邮件服务器器

smtp_obj = smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件⼈人邮箱中的SMTP服务器,端⼝口是25
smtp_obj.login("xxx@qq.com", "xxx") # 括号中对应的是发件⼈人邮箱账号、邮箱密码

count=0
table_col_html="<thead>"

#循环excel
for row in sheet.iter_rows(min_row=1,max_row=2):
    count+=1
    if count==1:
        for col in row:
            table_col_html+="<th>{col.value}</th>"
        table_col_html+="</thead>"
        continue
    else:    
        row_text="<tr>" 
        for cell in row:
            # print(cell.value,end=",")
            row_text+=f"<td>{cell.value}</td>"
        row_text+="</tr>"   
        name = row[2]
        staff_email=row[1].value
        print(staff_email,name.value)
    

    mail_body= '''
        <h3> {name.value},你好: </h3>
        <p>请查收你2022-05月的工资条 </p>
        <table border="1px solid black">
        {table_col_html}
        {row_text}
        </table> 
        '''
    print(mail_body)
    msg = MIMEText(mail_body,"html", "utf-8") #plain文本格式
    msg["From"] = Header("人事部","utf-8") # 发送者
    msg["To"] = Header("员工","utf-8") # 接收者
    msg["Subject"] = Header("工资条","utf-8") # 主题
    smtp_obj.sendmail("8xxxxm", [staff_email], msg.as_string())
    print(f"成功发送到{staff_email} to {name.value}.")
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
EDM营销算法:python自动批量发邮件
EDM营销:全称Email Direct Marketing,即电子邮件营销。企业可以通过使用EDM软件向目标客户发送EDM邮件,建立同目标顾客的沟通渠道,向其直接传达相关信息,用来促进销售。EDM软件有多种用途,可以发送电子广告、产品信息、销售信息、市场调查、市场推广活动信息等。
机器学习和大数据挖掘
2019/07/02
3.3K0
EDM营销算法:python自动批量发邮件
使用Python自动生成报表以邮件发送
数据分析师肯定每天都被各种各样的数据数据报表搞得焦头烂额,老板的,运营的、产品的等等。而且大部分报表都是重复性的工作,这篇文章就是帮助大家如何用Python来实现报表的自动发送,解放你的劳动力,可以让你有时间去做更有意思的事情。
Python中文社区
2018/09/21
2.8K0
使用Python自动生成报表以邮件发送
python笔记3-发送邮件(smtplib)
前言 本篇总结了QQ邮箱和163邮箱发送邮件,邮件包含html中文和附件,可以发给多个收件人,专治各种不行,总之看完这篇麻麻再也不用担心我的邮件收不到了。 以下代码兼容python2和python3,
上海-悠悠
2018/04/08
1.2K0
python笔记3-发送邮件(smtplib)
python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解)
  本篇文章与前边没有多大关联,就是对前边有关发邮件的总结和梳理。在写脚本时,放到后台运行,想知道执行情况,会通过邮件、SMS(短信)、飞信、微信等方式通知管理员,用的最多的是邮件。在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮
北京-宏哥
2019/09/11
2.3K0
python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解)
Python3 SMTP发送邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
织幻妖
2021/01/20
1.1K0
Python3 SMTP发送邮件
python 邮件发送
  smtplib 模块 1、smtplib.SMTPAuthenticationError: (550, b'User has no permission') 2、smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') 这两个错误是你的密码用的不是授权码导致 3、554 DT:SPM 163 smtp5 这属于网易邮箱的一个退回检测机制导致,貌似跟发送比较频繁有关,被系统判定为病毒或垃圾邮件
py3study
2020/01/19
1.3K0
python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)
  上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是MIMEText 只能发送正文,无法带附件,因此我还需要继续改造我们的代码,实现可以发送带有附件的邮件。发送带附件的需要导入另外一个模块 MIMEMultipart。还有就是测
北京-宏哥
2019/09/11
2K0
python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)
Python下的邮件发送示例
注:邮件内容是使用HTML构建的,如果熟悉这方面,可以使用HTML的方式构建自己想要的内容结构
no怕不了木
2023/12/19
2500
python邮件发送和图片
​ 上班时间干别的事情是不太好的,如果被别人看到的话会很大程度上影响个人的前进的步伐。但是如果工作做的差不多了,那么闲着也是闲着。反正cpu资源浪费一天就是一天的折旧,那还不如多学点东西。我们之前的过程都需要点击运行,然后出来一个图。这种方式目标太大,容易被人发现。那么我们做个定时任务。然后把图片不显示,而是保存为图片。运营结束之后将图片放到邮件里,然后发送到手机。相对短信需要花费金钱来说,邮件最好了。
写一点笔记
2020/11/27
9730
Python 学习入门(5)—— 发送邮件
下载 email-6.0.0a1.tar.gz 或 Mail-2.1.0.tar.gz
阳光岛主
2019/02/19
7130
Python 学习入门(5)—— 发送邮件
python SMTP邮件发送
本例使用的时python2.7环境,python3的操作应该也是差不多的。 需要用到smtplib和email两个包。
py3study
2020/01/16
1.9K0
Python实现自动发送邮件(详解)
这点很关键,别忘了去开启SMTP, 别忘了去开启SMTP,否则邮件是无法发送成功的 。然后你还需要点击下面生成授权码,这个授权码才是使用Python发送邮件时的真正密码。
全栈程序员站长
2022/11/17
1.2K0
Python实现自动发送邮件(详解)
Python发送邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
青阳
2021/11/26
9300
python发送邮件(二)——smtplib模块和email模块
一、模块介绍 1、smtplib 模块(用于邮件的发送) ①理论解释 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]]) 通过这个语句,可以向SMTP服务器发送指令,执行相关操作(如:登陆、发送邮件)。所有的参数都是可选的。 host:smtp服务器主机名 port:smtp服务的端口,默认是25;端口号可以省略。 但是使用25号端口有一个问题,就是保密性不够好,数据都是明文传输,没有加密。 现在一般都推荐使用SSL,Secure So
Elsa_阿尼
2021/07/27
5.6K0
python发送邮件(二)——smtplib模块和email模块
Python3实现自动发送邮件
首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用SMTP协议。SMTP协议的默认TCP端口号是25。
用户9925864
2022/07/27
3530
Python3实现自动发送邮件
python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)
  前边几篇,已经教小伙伴们掌握了如何生成HTML的测试报告,那么生成测试报告,我们也不能放在那里不管了,这样即使你报告在漂亮,领导也看不到。因此如果想向领导汇报工作,不仅需要提供更直观的测试报告。而是我们需要将生
北京-宏哥
2019/09/11
1.6K0
python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)
python3实现邮件的发送
使用的email和smtplib模块,这里简单介绍下smtplib.SMTP()类
dogfei
2020/07/31
3830
[Python] Python发送邮件(文本邮件发送)
直接上代码吧 然后采用者直接写好自己的信息就可以运行啦 import smtplib from email.mime.text import MIMEText from email.header import Header mail_host = "smtp.qq.com" #邮箱服务器(这里采用的是QQ的) mail_user = "******@qq.com" #发送者的邮箱地址 mail_pass
Michael阿明
2021/02/19
2.7K0
Python:一周笔记
主题 邮件处理 日志模块 pdf处理 md5 mongodb索引和聚合 excel 读写 1. 发送邮件模块 这里指的邮件功能当然不是指的是职场上所谓的邮件,指的是程序运行中希望将程序运行的日志信息或者错误捕获信息发送给指定的收件人,通过邮件可以了解程序运行的状态或者出错信息。 关于邮件的基本概念,这里引用廖雪峰老师python教程中的邮件模块: 假设我们自己的电子邮件地址是me@163.com,对方的电子邮件地址是friend@sina.com(注意地址都是虚构的哈),现在我们用Outlook或者Fox
谢伟
2018/06/06
8100
Python实现邮件发送
    RCPT 标识单个的邮件接收人;常在MAIL命令后面,可有多个rcpt to:
py3study
2020/01/07
7110
相关推荐
EDM营销算法:python自动批量发邮件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验