大家好,我是【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秒不到,效果还不错。