项目说明
每家公司每个月都要向员工发送一次工资邮件。通常的做法是,财务主管提供一个工资Excel表,其中每一行对应一个员工的工资,让财务美眉们为每个员工编写一封通知邮件,单独发送给对应的员工。如果公司不到10人还好,要是公司有100人,那财务美眉就要疯掉了。如果这时候你用Python写一个程序,根据Excel内容,自动生成邮件并发送给同事,几分钟帮财务美眉完成工作。那财务美眉必定对你刮目相看,说不定你的桃花运就来了呢!
知识说明
通过这个项目,希望大家学习到如下知识点:
1、熟悉编码和调试的流程,巩固Python基础知识。
2、学会用Python读取Excel中的信息。
3、学会用Python发送邮件。
项目资料
这个项目会用到一个工资Excel表,大家可以从下面地址下载:
长按识别小程序码,进入免费课程下载
下载后,文件名比较长,请将该文件重命名为“wooyide_salary.xlsx”。此表中所有个人信息均为虚构,如需实际发送邮件时,请将其中邮箱替换为自己的邮件地址。
读取Excel中的信息
为了给员工发送工资邮件,我们第一步需要读取工资Excel表内的信息。
读取Excel表文件,我们需要用到一个第三方库“openpyxl”。
安装openpyxl
只需要打开终端,输入下面命令:
py -m pip install openpyxl
看到这样的提示,就说明安装成功了。
开始编码
首先在“wooyide_salary.xlsx”所在文件夹中,创建一个名为“parse_excel.py”的文件,文件内容为:
# 从openpyxl中导入load_workbook
from openpyxl import load_workbook
# 加载excel文件,并将文件对象赋值给变量wb
wb = load_workbook(filename = 'wooyide_salary.xlsx')
# 从wb(一个Excel)中,获取其中一个表格,并将表格赋值给变量sheet
sheet = wb['Sheet1']
# 打印表格中“A1”单元格的内容
print(sheet['A1'].value)
这个文件一共4个语句,其中每个语句的功能都写在语句上方的注释中了,应该很好理解。其中有几个Excel术语:表格、A1单元格,这里我简单解释一下。
表格:每个Excel文件本质上都是一个表格的集合,一个Excel文件中可以有多个表格。Excel文件和表格的关系,类似浏览器和标签页的关系。Excel文件中,你可以点击底部的表格名称来切换表格。
单元格:表格中的一个小格子叫“单元格”。每一个单元格对应一个坐标,横轴的坐标是英文字母,纵轴的坐标是数字(也就是行号)。所以“A1”就是左上角的那个单元格,“C3”就是第三列、第三行的单元格。
上面的脚本中,我们打印出了Excel文件中Sheet1表格的左上角的单元格的内容。
运行这个Python脚本(代码较少的Python项目,我们称之为脚本),终端打印了文字“员工姓名”:
$ py parse_excel.py
员工姓名
获取全部员工工资信息
通过上面的脚本,我们成功获得了一个单元格的内容。为了获得全部员工的信息,我们实际上是要获得以“A2-E2-E4-A4”四个单元格为角的矩形内部的所有单元格的内容。
自然地,我们会直接想到用for循环遍历的形式获取所有单元格内容,像这样:
for row in [2, 3, 4]:
print("\n员工工资信息:")
for col in ['A', 'B', 'C', 'D', 'E']:
print(sheet[col + str(row)].value)
其中第二行print的字符串中“\n”是代表换行的意思,以便让每个员工信息之间有一个空行,这样看起来更直观。
运行这段代码,确实能够得到我们期望的输出结果:
员工工资信息:
张三
3276131224@gmail.com
3500
500
4000
员工工资信息:
李四
lovethisworld@hotmail.com
4000
200
4200
员工工资信息:
王二麻子
loveandpeace@facebook.com
2570
400
2970
不过这段代码只能用于员工数量很少的情况,因为我们使用了[2,3,4]这样的固定数组来遍历员工,如果员工有1000人,单写这个数组就会花很长时间。那么如何支持大量员工的情况呢?我们可以用下面代码来代替这个固定数组。