周洪斌,苗盼盼
(沙洲職業(yè)工學(xué)院數(shù)字化與微電子學(xué)院,張家港 215600)
Python 程序設(shè)計語言具備語法簡潔、靈活高效、類庫豐富等優(yōu)點,在網(wǎng)絡(luò)爬蟲[1]、數(shù)據(jù)分析、人工智能、辦公自動化、Web 自動化測試[2]等方面得到了廣泛運用。辦公自動化是眾多企事業(yè)單位每天面臨的重要工作,當(dāng)面臨多個文檔、電子表格需要處理時,采用傳統(tǒng)的單個文檔一一處理的方式不僅枯燥乏味、耗時費力,而且容易出錯,采用Python 實現(xiàn)辦公自動化,實現(xiàn)文檔、電子表格的批量處理,可以有效提高辦公效率。Python 語言提供了豐富的類庫支持Word 文檔、Excel 表格的自動化處理[3]以及電子郵件的自動收發(fā)。
Win32com 是Python 操作Word 文件的常用組件,只要計算機已安裝Microsoft Office 軟件,Python 就可以通過內(nèi)置的Win32com 組件對Microsoft Office文件進(jìn)行存取。
(1)創(chuàng)建Word應(yīng)用程序變量
from win32com.client import Dispatch
word=Dispatch(“Word.Application”)
word.Visible=0
word.DisplayAlerts=0
Word 應(yīng)用程序變量的Visible 屬性表示是否顯示W(wǎng)ord 界面,0 表示不顯示;DisplayAlerts 屬性表示是否顯示W(wǎng)ord警告信息,0表示不顯示。
(2)新建文檔并寫入內(nèi)容
doc=word.Documents.Add()
range=doc.Range(0,0)
range.InsertAfter(“Python寫入”)
Word 應(yīng)用程序變量的Documents.Add 方法用于新建一個文件,Range方法用于設(shè)置文件位置,InsertAfter方法表示在該位置后面寫入內(nèi)容。
(3)保存、關(guān)閉文件并退出Word應(yīng)用程序
doc.SaveAs(“D:\py.docx”)
doc.Close()
word.Quit()
自動操作文件完成后退出Word 應(yīng)用程序,以免占用系統(tǒng)資源。
Pandas 是Python 廣泛使用的數(shù)據(jù)分析庫,可以用于讀寫Excel 表格、CSV 等格式的數(shù)據(jù)文件[4]。Pandas庫主要提供了Series、DataFrame兩種類型的數(shù)據(jù)對象用于存儲及分析數(shù)據(jù)。Series用于存儲一行或一列的數(shù)據(jù),可以理解為Excel表格中的一列數(shù)據(jù);DataFrame 用于存儲多行和多列的數(shù)據(jù)集合,可以理解為Excel 的表格。通過Pandas讀寫Excel文件的基本步驟如下:
(1)通過pandas 提供的read_excel 方法讀取Excel文件
import pandas as pd
data=pd.read_excel(“員工信息.xlsx”)
上面的data 變量即為DataFrame 類型的變量。
(2)通過列名訪問數(shù)據(jù)列
from datetime import datetime
#計算工齡
data[“工齡(年)”]=datetime.now().year-data
[“入職時間”].dt.year
(3)通過to_excel方法寫數(shù)據(jù)到Excel文件中
data.to_excel(“員工工齡.xlsx”)
SMTP 是發(fā)送郵件的協(xié)議,Python 通過內(nèi)置的smtplib和email兩個模塊提供對SMTP的支持,smtplib 負(fù)責(zé)發(fā)送郵件,email 負(fù)責(zé)構(gòu)造郵件。使用Python發(fā)送郵件的主要代碼如下:
(1)導(dǎo)入需要的smtplib和email模塊
import smtplib
import email.mime.multipart
import email.mime.text
(2)給出發(fā)件人郵箱、授權(quán)碼及收件人郵箱
#發(fā)件人郵箱
sendAddr=‘szitzhb@qq.com’
#發(fā)件人授權(quán)碼
password=‘wheqqckqwysxugha’
#收件人郵箱
recipientAddrs=‘itfans@163.com’
(3)通過email 模塊的MIMEMultipart 對象構(gòu)造郵件內(nèi)容,包括發(fā)件人、收件人、郵件主題及正文
#構(gòu)造郵件內(nèi)容
msg=email.mime.multipart.MIMEMultipart()
msg[‘from’]=sendAddr
msg[‘to’]=recipientAddrs
#郵件主題
msg[‘subject’]=‘Python發(fā)送郵件’
#郵件正文
txt=email.mime.text.MIMEText(‘這是一封來自
Python的郵件?!?,‘plain’,‘utf-8’)
msg.attach(txt)
(4)建立與服務(wù)器的連接并發(fā)送郵件
#建立SMTP_SSL連接
smtp=smtplib.SMTP_SSL(‘smtp.qq.com’,465)
#登錄郵箱
smtp.login(sendAddr,password)
#發(fā)送郵件
smtp.sendmail(sendAddr,recipientAddrs,str(msg))
smtp.quit()
企業(yè)人力資源部門給新員工發(fā)送PDF 格式的錄用通知書通知其辦理入職手續(xù),是人力資源部門的一項常規(guī)工作。如果錄用的新員工人數(shù)較多,則是一項費時費力的工作。我們可以通過Python 實現(xiàn)PDF 格式錄用通知書的批量產(chǎn)生并自動發(fā)送電子郵件,具體過程如圖1所示。
圖1 批量產(chǎn)生錄用通知書并發(fā)送郵件過程
制作如圖2 所示的錄用通知書Word 模板,{{name}}、{{gender}}、{{department}}以及{{position}}表示占位符,是需要填充的內(nèi)容,并可以根據(jù)需要設(shè)置好格式。
圖2 新員工錄用通知書模板
通過Pandas 從圖3 所示的員工錄用Excel 名單中讀取錄用信息。
圖3 新員工錄用名單
主要代碼如下:
#導(dǎo)入pandas
import pandas as pd
#讀取excel文件
emps=pd.read_excel(‘錄用名單.xlsx’)
#依次獲得各列的值,即新員工姓名、
性別、入職部門、崗位以及郵箱
name=emps[“姓名”].str.rstrip()
#將性別男、女轉(zhuǎn)換成先生、女生
gender=emps[‘性別’].str.rstrip().map(dict(zip
([‘男’,‘女’],[‘先生’,‘女士’])))
department=emps[‘入職部門’].str.rstrip()
position=emps[‘入職崗位’].str.rstrip()
email=emps[‘郵箱’].str.rstrip()
使用DocxTemplate 可以根據(jù)模板批量生成錄用通知書,主要步驟如下:
(1)安裝并導(dǎo)入DocxTemplate
pip install docxtpl
from docxtpl import DocxTemplate
(2)使用2.2 節(jié)讀取的新員工錄用名單填充模板
num=emps.shape[0]
for i in range(num):
context={
“name”:name[i],
“gender”:gender[i],
“department”:department[i],
“position”:position[i]
}
tpl=DocxTemplate(‘錄用通知書模板.docx’)
#通過DocxTemplate的render方法渲染模板
tpl.render(context)
#生成每個新員工的錄用通知書
tpl.save(file_path+r“{}的錄用通知書.docx”.format
(name[i]))
生成的錄用通知書效果如圖4所示。
圖4 生成的新員工錄用通知書
可以通過Win32com 組件把上一步生成的Word 格式的錄用通知書自動轉(zhuǎn)換成PDF 格式。主要代碼如下:
doc=word.Documents.Open(fileName)
#下面的2行代碼用于把文件擴展名改為pdf
index=fileName.find(“.”)
pdfFile=fileName[0:index]+“.pdf”
#存為PDF格式,17代表PDF格式
doc.SaveAs(pdfFile,17)
doc.Close()
使用Python 自動發(fā)送電子郵件,并把上一步生成的PDF 格式的錄用通知書作為附件發(fā)送。添加附件的主要代碼如下:
msg=email.mime.multipart.MIMEMultipart()
part=MIMEApplication(open(attachName,‘rb’).read())
part.add_header(‘Content-Disposition’,‘a(chǎn)ttachment’,
filename=attachName)
msg.attach(part)
Python語言為辦公自動化提供了Win32com、Pandas、DocxTemplate、smtplib 等豐富的類庫,可以實現(xiàn)Word、Excel文檔以及郵件處理的自動化,擺脫機械性和重復(fù)性的煩瑣事務(wù),降低企事業(yè)單位用工成本,提高工作“含金量”,實現(xiàn)企事業(yè)單位的自動化、高效化、智能化辦公。