转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒)
若公众号内转载请联系公众号:早起Python
这篇文章能学到的主要内容:
imbox 读取邮件解析附件
openpyxl 和 python-docx 对文件的交互操作
一、需求描述
你在某三家医院的医务处工作,之前已经发通知让医生们申请外派 A 医院进修,表格 申请.xlsx 如下:
你需要根据他们的申请表开出相应的介绍信:
每个人会单独自己填写好的表格以 “进修申请 xxx” 的邮件标题发到你的邮箱。申请截止日期到了,你打开邮件发现有 300 多人申请,而你觉得从邮件中下载附件,打开 Excel 文件并把对应信息填写到 Word,再修改介绍信文件名为 “xxx 进修介绍信” 实在过于繁琐,你希望借助 Python 自动化高效完成上述任务
二、逻辑梳理
这次的真实需求实际上和之前的推文 批量生成多份合同:https://www.jianshu.com/p/3ee47f594d81 非常类似,不同之处在于需要配合邮件相关的工具完成整个需求。本需求同样绕不开一个问题:程序如何知道要将某个信息填到何处?为了解决这个问题,我们需要对模板 介绍信.docx 进行修改,即将需要填写的地方改成某种标识,让程序可以“看到标识就明白此处应该放什么信息”
采取的策略是:将需要填写的地方改成表中的列名,即:
这样程序通过文本识别就能够定位相应信息并完成替换
本需求完整的逻辑包括:
遍历所有邮件,将标题符合要求的邮件附件下载到指定文件夹中
遍历打开文件夹下的所有 Excel 文件
获取每个 Excel 表格中的信息,填写至 Word 模板中
保存文件到新文件夹中
三、代码实现
1. 解析邮件
首先完成第一部分的工作,读取全部邮件:
import keyring
from imbox import Imbox
利用 keyring 库,通过系统密钥环将密码(授权码)预先在本地存储好,后面在代码中调用