大家好,我是【Python/ target=_blank class=infotextkey>Python辦公自動化】:閑暇之余分享點文字、編程、設計等干貨,希望和你一起成長。
一起學習Python辦公自動化,教你快速學習Python的方法,需要代碼可以站內私信我。
員工求職,企業招聘,最終都以簽訂勞動合同為主。
本例目標:根據數據庫中的人員生成勞動合同。
最終效果:以文件方式生成勞動合同并放置到相應目錄下。
技術點:數據庫的讀取、docxtpl庫的使用、元組內數據的訪問等。
代碼編寫方式:采用函數、面向過程方式編寫。
由于代碼中涉及到的技術點在之前章節都有所講解,這里就不再贅述。
接下來我們一起進行代碼編寫,通過2步搞定這個案例。
(1)模板文件。
模板文件見docxtpltemplate勞動合同模板.docx,打開模板文件,可以看到,有7處內容需要更換。分別是甲方公司、乙方人員姓名、乙方部門、乙方職位、甲方人員姓名、乙方人員姓名、時間(年月日),如圖所示。


(2)案例代碼。
代碼中定義了query()函數,主要用于數據庫查詢,返回元組。build_hetong()函數根據數據庫返回記錄,循環讀取模板,找到相應的值,然后渲染生成文件。
from docxtpl import DocxTemplate
import os
import pyMySQL
import time
cur_path = os.path.dirname(__file__)
tempfilename = os.path.join(cur_path, 'template', '勞動合同模板.docx')
today = time.strftime("%Y-%m-%d", time.localtime())
def query():
try:
# 數據庫連接,返回數據庫連接對象
conn = pymysql.connect(host='localhost', user='root',
passwd='123456', db='test', port=3306)
cur = conn.cursor()
sql = 'select * from t_person_info'
cur.execute(sql)
result = cur.fetchall()
return result
except Exception as e:
print(e)
finally:
conn.close()
def build_hetong():
result = query()
for x in result:
tpl = DocxTemplate(tempfilename)
context = {
'firstparty': '燈塔教育',
'secondparty': x[1],
'department': x[15],
'job': x[16],
'owner': '龍卷風',
'name': x[1],
'sj': today
}
tpl.render(context)
savefilename=os.path.join(cur_path,'build',x[1]+'勞動合同.docx')
tpl.save(savefilename)
if __name__ == "__main__":
start = time.time()
build_hetong()
end = time.time()
sj = end-start
print(f"花費時間(秒):{sj}")
代碼執行結果如圖所示。483條數據使用了10秒不到,效果還不錯。
