当前位置: 首页 > 办公技巧 > 正文

python自动化办公技巧(第12天 | 12天搞定Python,办公自动化(完结必读))

  • 叁碗诸角 叁碗诸角
  • 办公技巧
  • 2023-07-12 19:34:13
  • 0

有朋友问我,能说说用Python操作excel和word究竟有什么用么?别的不敢说,这个我还真知道,毕竟我曾用xlwings(操作excel)帮人力资源部的小妹合并过几十个excel文件,省去她手工处理的大半天时间,她一开心说要给我介绍个女朋友。我还曾用xlwings和python-docx帮助市场部,批量向经销商发送邀请函等。应用范围挺多的,我就不一一列举了。

不知Python如何操作excel的,请先看《第12天 | 12天搞定Python,让excel飞起来 》,不知Python如何操作word的,请先看《第12天 | 12天搞定Python,word和pdf 》。接下来,咱们就来实现批量发送邀请函的功能。


12.4 批量发送邀请函

读取excel客户列表中的的名字和电子邮件地址,将客户名字写入word邀请函;将邀请函作为电子邮件附件,按指定电子邮件地址进行发送。

1. 读取客户清单

数据我随意造的,注意改成你自己能接收电子邮件的地址,客户名字,你爱叫什么就叫什么。客户信息.xlsx文件内容示例如下。

实现功能代码

import xlwings as xwapp = xw.App(visible=True, add_book=False)app.display_alerts = Trueapp.screen_updating = True# 打开文件wb = app.books.open("客户信息.xlsx")sht = wb.sheets["sheet1"]rows = sht.used_range.last_cell.row# 从第2行开始,第1行为标题i = 2while i <= rows: # 读取一行 rowRange = "B%d:D%d" % (i, i) rowData = sht.range(rowRange).value # word会用到 name = str(rowData[0]) ("先生" if rowData[2] == "男" else "女士") # 电子邮件地址 email = rowData[1] print(name, email) i = 1wb.save()wb.close()app.quit()

输出结果

2. word模板

自己造一个模板文件,命名为invitation.docx。程序将里面的标签{{name}}、{{year}}等替换为指定的人和日期。在保存时,记得存为另外的名称,否则invitation.docx就不可以复用了(因为标签被替换掉了,就没有标签存在了)。

实现功能的代码

from docxtpl import DocxTemplatefrom datetime import datetime# 模板文件tpl = DocxTemplate("invitation.docx")# 需要替换内容以key:value的方式进行更换dt = datetime.now()context = { "name": "刘德华先生", "year": dt.year, "month": dt.month, "day": dt.day}tpl.render(context)tpl.save("邀请函.docx")

输出结果

3. 发送邮件

发送邮件,用Python内置的smtplib接口便可,注意发送word附件时,相关参数的设置。我实现的功能是通过二进制流的方式进行的。代码在实际项目中拷贝出来的,我们一直在使用。我发布文章时,又进行了多次测试,结果都没发现任何问题的,你大可放心使用。

import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.header import Header# 设置登录及服务器信息mail_host = "smtp.126.com"mail_user = "xxx@126.com"mail_pass = "xxx***"sender = "xxx@126.com"receivers = ["xxxx2@qq.com"]# 设置邮件信息,处理正文及附件message = MIMEMultipart()message["From"] = sendermessage["To"] = receivers[0]message["Subject"] = Header("您好,邀请您参加吹牛逼大会", "utf-8").encode()# 邮件正文内容content = """刘德华先生,您好:n我是吹牛逼公司公司的老陈。我想邀请您于2020-10-32,参加公司一年一度的吹牛逼大会望您能在百忙当中,抽空出席。n邀请函已附在附件,麻烦您看后给与答复。n谢谢!nnn祝:万事如意,工作顺利.n邀请人:老陈说编程n邀请日期:2020-10-20"""message.attach(MIMEText(content, "plain", "utf-8"))# 设置参数with open("邀请函.docx", "rb")as h: content2 = h.read()part = MIMEText(content2, "base64", "utf-8")# 附件设置内容类型,方便起见,设置为二进制流part["Content-Type"] = "application/octet-stream"# 设置附件头,添加文件名part.add_header("Content-Disposition", "attachment", filename="邀请函.docx")message.attach(part)# 登录并发送try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) smtpObj.login(mail_user, mail_pass) smtpObj.sendmail( sender, receivers, message.as_string()) print("邮件发送成功") smtpObj.quit()except smtplib.SMTPException as e: print("邮件发送失败", e)

输出结果

邮件发送成功

好了,自己将从excel读取的客户信息写入word模板并进行邮件发送吧。如果我写得这么好,你都不转发的话,你会不会有点....?

好了,有关Python实现办公自动化的内容,老陈讲完了,如果觉得对你有所帮助,希望老铁能转发点赞,让更多的人看到这篇文章。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励。


一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。我将分享Python,前端(小程序)和App方面的编程知识。关注我,没错的。


#Python##Python编程从入门到实践##程序员##办公自动化##邮件#


最新文章