办公自动化/在女票面前显摆极客的十分之一功力

去社区提问

简介:计算机能高效准确地处理各种工作,而且无怨无悔。利用它可以解决各种重复性工作,让办公速度起飞。放送一个自动发送邮件小案例给你。

在女票面前显摆极客的十分之一功力

加班党的烦恼

加班党的烦恼

职场生活千姿百态,但不变的加班常伴你左右~就算有一天无所不能的精灵宝可梦走入职场也免不了出现下面的几种场景:

距离下班时间还有半小时,随时准备好拎包跑路的可达鸭正在轻松摸鱼,突然领导发来数千张图片,要求今天将它们调整成统一大小,并加上公司logo,今晚就要做完。这时候鸭鸭同学小小的眼睛里一定写满了大大的疑惑,心里想着:Why me ???

杰尼龟同学去接杯水的功夫,回来突然接到了一个按模版批量修改生成合同的任务,需要把Excel中几百份的客户信息填写到同一个合同模版中,打印出来。抬头看一眼表,依照马克思理论,今天又双叒叕要被剥削剩余价值了。

另一边,小火龙正在疯狂发送邮件,原来周年庆要到了,需要给每个客户发送专门的活动通知,邮件里需要写上客户的姓名,加上优惠活动详情页,最后加上公司的落款。加班到头大,甚至开始怀疑人生。

这些令人抓狂的瞬间你是否熟悉?有没有和深夜加班的你产生灵魂上的共鸣。我们来自五湖四海,却因为相似的加班任务走到了一起,惺惺相惜。

小朋友你是否有很多问号?

各种重复性的工作还在让宝可梦们头晕眼花的时候,皮卡丘同学打开电脑,一顿操作之后快速搞定了所有任务,潇洒准时打卡下班。像极了小时候别人家的孩子,早早写完交卷,而自己还在慢吞吞读题目。

我已经看到了你头顶的一排问号,好了好了现在就告诉你皮卡丘提高效率的秘籍‘十万伏特’是怎么炼成的。

超好用的Python

其实我们面临的大多数任务都可以通过编写代码来快速实现。编写程序可以让计算机自动完成它们,达到自动化办公的效果。别人两天才能做完的任务,你只需要2小时就能轻松解决。

说到办公自动化,可能会第一时间想到Word,Excel,PowerPoint等等,那么如果要想它们自动智能地完成一些工作,会用到什么语言呢?可能有些同学会选择VBA,而皮卡丘和我们的课程中都选用Python这门语言,所以在这里对比一下为什么选择Python而不是VBA。

首先VBA是一门强大的语言,是office自带,专用于office的语言,不需要安装。

Python和它相比有以下三个优点:

  • 学习成本低。

Python对新手及其友好,它没有很多的条条框框,更加自由和灵活。零基础小白也能迅速入门上手。

  • 适用性广泛。

学习Python不光可以应用在Word,Excel等办公软件中,还可以利用它自动发送邮件,写网络爬虫,微信机器人,实现数据可视化等等。学习一门语言可以实现这么多功能,稳赚不赔,超值划算。

  • 第三方库丰富。

Python有着丰富的第三方库,当想要实现功能的时候可以直接调用,不需要自己重复造轮子。

让办公速度坐上火箭

计算机编程的威力可以让我们省去学习罗志祥时间管理课程的时间,用来完成更多任务。大多数人坐在电脑前点击鼠标键盘ctrl+c,ctrl+v执行着重复性的工作,却没有意识到只要给予机器相应指令,它能够在几秒中的时间完成工作。

拯救桌面

工作一天不同的文档表格占据了整张桌面,乱成这个样子简直是治疗强迫症利器。只需要下面短短的几行代码就可以把杂乱无章的文件统一归类,自动整理桌面。

  1. import os
  2. import shutil
  3. path='.\' #这里引号中输入待处理文件夹的路径
  4. files=os.listdir(path)
  5. for f in files:
  6. folder_name=path+f.split('.')[-1]
  7. if not os.path.exists(folder_name):
  8. os.makedirs(folder_name)
  9. shutil.move(f,folder_name)
  10. else:
  11. shutil.move(f,folder_name)

代码虽少,复用性却很强,类似的任务只需要更改路径就可以啦。

Word到Excel

有这样一份Word文件,需要提取日期,文号,文件标题着三项内容到Excel表格中存储。一共有大约3000条类似的信息。

表格的样式如下:

将信息填写到指定位置,同时修改为标准格式。如果手动复制和修改,按照一条10s的时间计算,一分钟完成6条,最快也要3000/6=500(min)

而这类文件整理任务非常适合使用Python来完成,运行十分钟左右就可以得到结果~

当然Python自动化办公的强大之处还远远不止这些,在后面的课程中会以具体案例的形式继续为你详细拆分讲解~

Python办公自动化常用模块

我们前面提到过使用Python进行办公自动化的一个优点在于它有着十分强大的第三方库,可以直接拿来使用。在自动化办公方面给大家推荐以下几个常用模块,帮助你打怪升级~

  • Excel自动化

Python针对Excel有很多第三方库可以使用,比如:

xlwings,pandas,xlswriter,xlrd,xlwt,openpyxl

这些库可以很方便地对Excel文件增删改写,格式修改等。

  • Word自动化

利用python-docx模块,Python可以创建和修改Word文档,包括插入图片,表格,段落,标题,设置段落间距,字体大小样式的等等。

  • PowerPoint自动化

Python支持ppt自动化处理,主要的库有pywin32com,pptx,可以创建修改ppt文件,推荐你使用pptx库,是目前主流的ppt处理库。

  • 邮件处理自动化

python处理邮件也是极其便利的,smtplib、imaplib、email三个库配合使用,实现邮件编写、发送、接收、读取等一系列自动化操作,省时省力。

  • 数据分析

数据处理的库主要有:pandas、numpy、matplotlib、sklearn涉及到分析函数方法,统计学模型,可视化处理。这些库的具体差别和使用我们在后续的数据分析课程会继续给大家讲解。

好了,关于Python自动化办公的简介就到这里,接下来和我一起多花一点点时间看两个实际应用案例,帮你在告别加班的路上加个速,愉快的心情飞上天,和太阳肩并肩~

批量自动发送邮件

来自董事长办公室的问候

2019年11月11日是公司10周年庆典的日子,那场面真是锣鼓喧天,鞭炮齐鸣,红旗招展,人山人海。

在这光棍节与司庆双喜临门的日子里,公司不得来点仪式感,给大家发些什么吗~

搞错了搞错了,公司福利肯定早早就给大家安排上啦。

发放礼物的光荣任务自然就落在了人事部门的头上。

HR需要给每位员工发送祝福邮件,并根据员工入职时间不同,告知大家领取相应不同的礼物。

来看看公司大精心为大家准备的惊喜大礼:

虽然我们都认为送一套房子其实更能让大家印象深刻,但毕竟咱们属于走心派,让大家感受到公司的浓浓温情才是最重要的嘛~

今天我们的任务是帮HR计算出每个员工的入职时长,判断他们应该领取的礼物类型,再发送邮件通知每个员工。

邮件模版已经准备好了:

亲爱的xxx:

感谢您在过去xxx个日日夜夜,为了工作孜孜不倦地奋斗。值公司周年之际,我谨代表公司全体,对你的付出表达诚挚的谢意。
在这特殊的日子,送上一份小小礼物:【xxx】,聊表心意。
期望在未来的日子里,我们继续携手共进,再创辉煌!

此致
敬礼!

董事长办公室

共有三处内容需要替换:员工姓名,入职天数,礼物信息。

员工数量较少的情况下处理起来还比较简单,但当员工数量为几百上千时,就是一个非常庞大的工作量了。

我们试试用Python写个代码来解决,一键完成批量发送邮件任务~

算算你的搬砖时长

特别提示:如果暂时不理解代码的含义也没有关系~只通过这些案例了解Python用途就达到了目标。12课时开始将进入详细的Python语法学习,要继续加油呀。

员工的姓名,邮箱,入职日期信息存储在一个Excel表格中,长下面这个样子:

对表格的操作依然需要导入我们的老朋友pandas模块,数据分析每节课都会用到它,这里就不再重复介绍啦,需要复习的同学请打开传送门直接到达数据分析章节~

下面读入员工信息,查看前五行数据:

代码练习:

编程区

  1. import pandas as pd
  2. df = pd.read_excel('员工信息.xlsx')
  3. df.head()

终端区

把准备好的三种不同奖项放置在列表中。

  1. gift = ['一个月奶茶券', '运动手环+3天带薪年假抽奖名额', 'kindle阅读器+特斯拉抽奖名额']

列表在Python中相当于一个容器,可以盛放你想要的各种内容。放进列表的元素是有序的,可以根据位置,定位找到放入容器的内容。

我们根据偏移量来找到对应元素,与日常习惯不同,偏移量是从0开始的。

举一个有味道的例子:

比如我们在列表中放进了[‘榴莲’,‘臭豆腐’]

榴莲就对应偏移量0,臭豆腐对应1。

在这个案例中,‘奶茶券’,‘运动手环+年假抽奖名额’,‘kindle阅读器+特斯拉抽奖名额’三种礼品就分别对应偏移量0,1,2。

根据每行内容计算工作年份及应得奖品等级。

下面导入datetime模块,用来处理时间信息。

定义一个方法,实现的功能是计算入职天数,再用入职天数/365取整得到入职年限,匹配对应的礼物等级。

  1. from datetime import datetime
  2. birthday = datetime(2019, 11, 11)
  3. def get_gift_type(time):
  4. # 计算时间差
  5. delta = birthday - time
  6. delta_year = delta.days // 365
  7. # 根据相差年份数返回奖品等级
  8. if delta_year == 0:
  9. return delta.days, 0
  10. elif delta_year < 3:
  11. return delta.days, 1
  12. else:
  13. return delta.days, 2

这个方法写好啦,等会儿就能直接用它来帮我们计算每位员工的入职时间和礼物等级了~

下面来创建邮件的模版信息,姓名,入职天数,奖品的内容用大括号{}代替。

大括号出现的位置就相当于告诉计算机‘这里的空缺等下要用其他内容替换’。

我们把文本内容复制过来就可以啦。

  1. msg = '''
  2. 亲爱的{}:
  3. 感谢您在过去{}个日日夜夜,为了工作孜孜不倦地奋斗。值公司周年之际,我谨代表公司全体,对你的付出表达诚挚的谢意。
  4. 在这特殊的日子,送上一份小小礼物:{},聊表心意。
  5. 期望在未来的日子里,我们继续携手共进,再创辉煌!
  6. 此致
  7. 敬礼!
  8. 董事长办公室
  9. '''

邮件发送框架函数

Python内置的smtplib和email模块可以帮我们实现邮件的构造和发送功能。

定义一个名为send_email的方法实现发送邮件的发送效果,邮件主题为‘感谢一路有你’:

  1. import smtplib
  2. from email.utils import formataddr
  3. from email.header import Header
  4. from email.mime.text import MIMEText
  5. from email.mime.multipart import MIMEMultipart
  6. from email.mime.application import MIMEApplication
  7. def Send_email(sender,password,content,receive):
  8. receivers = receive
  9. msg = MIMEMultipart()
  10. msg["Subject"] = "感谢一路有你"
  11. msg["From"] = sender
  12. if len(receivers)>1:
  13. msg["To"] = ",".join(receivers)
  14. else:
  15. msg["To"] = receivers[0]
  16. part = MIMEText(content,_charset="UTF-8")
  17. msg.attach(part)
  18. try:
  19. smtp = smtplib.SMTP_SSL("smtp.exmail.qq.com")
  20. smtp.login(sender,password)
  21. smtp.sendmail(sender,receivers,
  22. msg.as_string())
  23. print("邮件发送成功")
  24. except smtplib.SMTPException as e:
  25. print("Error, 发送失败", e)
  26. finally:
  27. smtp.quit()

搞定之后怀着紧张的心情先来简单测试一下。

发件邮箱为:

先发给小伙伴一封试试水,看能不能成功。

嗯…就发一句“土豆土豆,我是地瓜,收到请回答”吧。

代码练习:

编程区

  1. sender = "xiaoxiangjun@xiaoxiangxueyuan.com"
  2. password = "wGjtxsZ9jjGEMCm2"
  3. content = "测试:土豆土豆,我是地瓜,收到请回答!"
  4. receive = ["cuiyingdan@xiaoxiangxueyuan.com"]
  5. Send_email(sender,password,content,receive)

终端区

看到提示,邮件发送成功~!下面终于可以用它给公司全体员工发邮件了。

毕竟大家还都等着收礼物呢。

回忆一下,上面的工作中我们定义了两个函数方法:

  1. 获取入职时长和礼物等级的get_gift_type方法。
  2. 用于发送邮件的send_email方法。

下面就要利用它们,读取‘员工信息’表格中的信息,给每位员工发送邮件啦~

叮~请查收礼物

我们再构造一个函数方法,使它能够按表格中每行信息发送邮件。

还记得邮件内容需要替换的三处吗?分别是姓名,入职时长,礼物信息。

其中的‘姓名’信息可以直接从表格中‘姓名’一列获取,入职时长和礼物信息两项内容也早早在前面的函数中铺垫实现啦。

把这三个内容填入邮件模版中,就生成了员工专属的邮件内容。

发送对象选择员工信息表格中‘邮箱’一列对应的内容就可以完成邮件发送~

  1. def handle_row(row):
  2. # 构建发送消息
  3. name = row['姓名']
  4. email = row['邮箱']
  5. delta_days, gift_type = get_gift_type(row['入职时间'])
  6. sent_msg = msg.format(name, delta_days, gift[gift_type])
  7. print(sent_msg)
  8. # 调用Send_email()发送邮件
  9. sender = "xiaoxiangjun@xiaoxiangxueyuan.com"
  10. password = "wGjtxsZ9jjGEMCm2"
  11. print('发邮件给{}...'.format(name))
  12. # receive = ['xianmaoyuan@xiaoxiangxueyuan.com']
  13. receive = [email]
  14. Send_email(sender,password,sent_msg,receive)
  15. return 'Done'

最后一步,按下启动键,让程序按行读取表格中的数据,坐等收邮件咯。

代码练习:

编程区

  1. df.apply(handle_row, axis=1)

终端区

发送成功~!看到同事们查收邮件时激动的表情,我的脸上不禁洋溢着姨母笑容。

成百上千封的邮件其实都可以通过这些代码一键发送。

要是没有Python,我们岂不是要一个个计算礼物等级,入职时间,再复制粘贴每个员工的邮件内容,一封封手动发送?

想想多么令人后怕,谁也不能阻止我学习。

今天立下flag:开开心心新学期,认认真真搞学习!

今天的内容就到这里啦,想和我一起成为学霸,掌握更多Python知识,欢迎扫描下方二维码?添加班主任微信,我们下次见咯~

扫描下方二维码,添加班主任微信

办公自动化 1/3

在女票面前显摆极客的十分之一功力

1.0x

恭喜完成本课时的学习!
坚持学习

行动力超过

累计学习

学习下一课时