python自动化办公(2)_word自动化处理

上章写了excel的处理,本文是word的自动化操作~

一、word基本操作

word自动化流程如下:
python自动化办公(2)_word自动化处理_第1张图片
1.1 常用语句
使用的库:docx

二、 实例演示

根据应聘数据,自动生成相对应的聘用信。结合Email,就可实现自动生成各自的聘用信,并自动发送给相应人员。偷偷吐槽一下,之前收到过发错的的应聘信,收到了其他人的,一来会让人觉得公司有点low,二来存在泄漏他人信息的安全危机。如果没有专门的系统使用,就可以用python,快速有准确,老板再也不用担心发错应聘信了。

以下是需要生成的聘用信模板,需要把XXX,yyyy等等换成相应人员信息,生成对应新的聘用信。

python自动化办公(2)_word自动化处理_第2张图片
下面上代码

1、导入模板,打印段落内容

import docx
from docx import Document
import time,datetime
import pandas as pd

# 1、导入模板,打印段落内容
doc = docx.Document('聘用信.docx')
'''
for paragraph in doc.paragraphs:
    print(paragraph.text)  #打印各段落内容文本
a = len(doc.paragraphs)
'''

for i in range(0,len(doc.paragraphs)):
    print(i)  #打印各段落索引
    print(doc.paragraphs[i].text) #打印各段落内容文本

python自动化办公(2)_word自动化处理_第3张图片

2、替换段落中的参数


#从上图可以看出,需要替换的是:
## 段落3:当天日期,年、月、日
## 段落4:姓名
## 段落5:姓名
## 段落10:岗位
## 段落16:入职日期,年、月、日

## 段落3:当天日期,年、月、日
today = time.strftime("%Y{y}%m{m}%d{d}",time.localtime()).format(y='年',m='月',d='日') #当天日期
doc.paragraphs[3].text = today #替换段落3

## 段落4:姓名
## 段落5:姓名
## 段落10:岗位
## 段落16:入职日期,年、月、日
## 这些内容是从应聘员工表格中获取,下面读取excel表格获取数据,进行替换
renyuan = pd.read_excel(r'C:\Users\lmy\Documents\临时\python自动化办公培训\应聘员工表.xls') 

python自动化办公(2)_word自动化处理_第4张图片

####先替换第一行测试一下######
## 段落4:姓名
doc.paragraphs[4].text = doc.paragraphs[4].text.replace('XXX',renyuan.iloc[0,0])

## 段落5:姓名
doc.paragraphs[5].text = doc.paragraphs[5].text.replace('XXX',renyuan.iloc[0,0])

## 段落10:岗位
doc.paragraphs[10].text = doc.paragraphs[10].text.replace('XXXX',renyuan.iloc[0,1])

## 段落16:入职日期,年、月、日
doc.paragraphs[16].text = doc.paragraphs[16].text.replace('yyyy',str(renyuan.iloc[0,2].date().year))
doc.paragraphs[16].text = doc.paragraphs[16].text.replace('mm',str(renyuan.iloc[0,2].date().month))
doc.paragraphs[16].text = doc.paragraphs[16].text.replace('dd',str(renyuan.iloc[0,2].date().day))
doc.save('%s聘用信.docx'%(renyuan.iloc[0,0]))

python自动化办公(2)_word自动化处理_第5张图片
导出文件如上图,没毛病,可以写个循环批量生成了。

for i in range(0,len(renyuan)):
    doc = docx.Document(r'C:\Users\lmy\Documents\临时\python自动化办公培训\聘用信.docx')
    doc.paragraphs[3].text = time.strftime("%Y{y}%m{m}%d{d}",time.localtime()).format(y='年',m='月',d='日')
    doc.paragraphs[4].text = doc.paragraphs[4].text.replace('XXX',renyuan.iloc[i,0])
    doc.paragraphs[5].text = doc.paragraphs[5].text.replace('XXX',renyuan.iloc[i,0])
    doc.paragraphs[10].text = doc.paragraphs[10].text.replace('XXXX',renyuan.iloc[i,1])
    doc.paragraphs[16].text = doc.paragraphs[16].text.replace('yyyy',str(renyuan.iloc[i,2].date().year))
    doc.paragraphs[16].text = doc.paragraphs[16].text.replace('mm',str(renyuan.iloc[i,2].date().month))
    doc.paragraphs[16].text = doc.paragraphs[16].text.replace('dd',str(renyuan.iloc[i,2].date().day))
    doc.save('%s聘用信.docx'%(renyuan.iloc[i,0]))

python自动化办公(2)_word自动化处理_第6张图片

# 需要转成pdf文件的可以用下面代码转换
'''
import os,win32com
import win32com.client
from win32com.client import Dispatch,constants,gencache
filename = 'lmy1聘用信.docx'
filepath = os.path.join(os.getcwd(),filename)
doc = wd.Documnets.Open(filepath,ReadOnly=1)
doc.SaveAs(filepath.replace(".docx",".pdf"),17)
doc.close()
'''

3、邮件自动发送相应应聘信

# 3、邮件自动发送相应应聘信
# 生成的附件直接发送邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
#设置服务器所需信息
#qq邮箱服务器地址
mail_host = 'smtp.qq.com'  
#qq用户名
mail_user = '5********@qq.com' 
#密码(部分邮箱为授权码,qq就是) 
mail_pass = 'q***********b'
#邮件发送方邮箱地址
sender = '5********@qq.com'  
#邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发
receivers = ['5********@qq.com']  

#设置email信息
message = MIMEMultipart() #创建一个带附件的实例
message['From'] = Header('才华有限公司','utf-8') #发送方信息
message['To'] = Header('应聘人员','utf-8') #接受方信息     
subject = '才华有限公司应聘'
message['Subject'] = Header(subject,'utf-8') #邮件主题  


#邮件正文内容
message.attach(MIMEText('恭喜入职才华有限公司,具体详见附件','plain','utf-8'))
 
#构造附件1,传送当前目录下的test.txt文件
att1 = MIMEText(open('lmy1聘用信.docx','rb').read(),'base64','utf-8')
att1['Content-Type'] = 'application/octet-stream'
#这里的filename可以任意写,写什么名字 邮件中就显示什么名字
att1['Content-Disposition'] = 'attachment;filename:"lmy1聘用信.docx"'
message.attach(att1)
 

#登录并发送邮件
try:
    smtpObj = smtplib.SMTP() 
    #连接到服务器
    smtpObj.connect(mail_host,25)
    #登录到服务器
    smtpObj.login(mail_user,mail_pass) 
    #发送
    smtpObj.sendmail(sender,receivers,message.as_string()) 
    #退出
    smtpObj.quit() 
    print('success')
except smtplib.SMTPException as e:
    print('error',e) #打印错误

开通邮件SMTP授权请看:https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256’)

完整版代码

import docx
from docx import Document
import time,datetime
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

def generate_doc_email(staff_path,doc_tempo_path):
    renyuan = pd.read_excel(staff_path)   #读取人员信息数据
    
    #循环每个人员信息,生成相对应的应聘信doc,并发送邮件
    for i in range(0,len(renyuan)):
        doc = docx.Document(r'C:\Users\lmy\Documents\临时\python自动化办公培训\聘用信.docx')
        doc.paragraphs[3].text = time.strftime("%Y{y}%m{m}%d{d}",time.localtime()).format(y='年',m='月',d='日')
        doc.paragraphs[4].text = doc.paragraphs[4].text.replace('XXX',renyuan.iloc[i,0])
        doc.paragraphs[5].text = doc.paragraphs[5].text.replace('XXX',renyuan.iloc[i,0])
        doc.paragraphs[10].text = doc.paragraphs[10].text.replace('XXXX',renyuan.iloc[i,1])
        doc.paragraphs[16].text = doc.paragraphs[16].text.replace('yyyy',str(renyuan.iloc[i,2].date().year))
        doc.paragraphs[16].text = doc.paragraphs[16].text.replace('mm',str(renyuan.iloc[i,2].date().month))
        doc.paragraphs[16].text = doc.paragraphs[16].text.replace('dd',str(renyuan.iloc[i,2].date().day))
        doc.save('%s聘用信.doc'%(renyuan.iloc[i,0]))
        
        
        mail_host = 'smtp.qq.com'  #qq邮箱服务器地址
        mail_user = '5********@qq.com'   #qq用户名
        mail_pass = 'q***********b'  #密码(部分邮箱为授权码,qq就是) 
        sender = '5********@qq.com'    #邮件发送方邮箱地址
        receivers = [renyuan.iloc[i,3]]  #邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发

        #设置email信息
        message = MIMEMultipart() #创建一个带附件的实例
        message['From'] = Header('才华有限公司','utf-8') #发送方信息
        message['To'] = Header('应聘人员','utf-8') #接受方信息     
        subject = '才华有限公司应聘'
        message['Subject'] = Header(subject,'utf-8') #邮件主题  
        message.attach(MIMEText('恭喜入职才华有限公司,具体详见附件','plain','utf-8')) #邮件正文内容
        att1 = MIMEText(open('%s聘用信.doc'%(renyuan.iloc[i,0]),'rb').read(),'base64','utf-8') #构造附件1,传送当前目录下的文件
        att1['Content-Type'] = 'application/octet-stream'
        att1['Content-Disposition'] = 'attachment;filename:"lmy1聘用信.docx"' #这里的filename可以任意写,写什么名字 邮件中就显示什么名字
        message.attach(att1)
        smtpObj = smtplib.SMTP()  
        smtpObj.connect(mail_host,25)  #连接到服务器
        smtpObj.login(mail_user,mail_pass)  #登录到服务器
        smtpObj.sendmail(sender,receivers,message.as_string()) #发送
        
    doc.Close() #关闭
    smtpObj.quit()  #退出

你可能感兴趣的:(python练手小项目,python)