大家好,我是【Python办公自动化】:闲暇之余分享点文字、编程、设计等干货,希望和你一起成长 。
一起学习Python办公自动化,教你快速学习Python的方法,需要代码可以站内私信我 。
员工求职,企业招聘,最终都以签订劳动合同为主 。
【500个文件生成不到10秒,Python生成合同不要太方便】本例目标:根据数据库中的人员生成劳动合同 。
最终效果:以文件方式生成劳动合同并放置到相应目录下 。
技术点:数据库的读取、docxtpl库的使用、元组内数据的访问等 。
代码编写方式:采用函数、面向过程方式编写 。
由于代码中涉及到的技术点在之前章节都有所讲解,这里就不再赘述 。
接下来我们一起进行代码编写,通过2步搞定这个案例 。
(1)模板文件 。
模板文件见docxtpltemplate劳动合同模板.docx,打开模板文件,可以看到,有7处内容需要更换 。分别是甲方公司、乙方人员姓名、乙方部门、乙方职位、甲方人员姓名、乙方人员姓名、时间(年月日),如图所示 。
文章插图
文章插图
(2)案例代码 。
代码中定义了query()函数,主要用于数据库查询,返回元组 。build_hetong()函数根据数据库返回记录,循环读取模板,找到相应的值,然后渲染生成文件 。
from docxtpl import DocxTemplate代码执行结果如图所示 。483条数据使用了10秒不到,效果还不错 。
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}")
文章插图
推荐阅读
- 国企|丈母娘“最理想女婿”职业排名,国企员工不吃香,医生成人生赢家
- 浏览器内容如何保存?
- Tinyid 深度解密滴滴的高性能ID生成器
- 保密文件柜是什么
- 上海文件柜生产厂家有哪些
- win10访问共享文件夹,出现“没有权限访问”一招解决
- 生成树实战演示,STP各端口的配置选举
- Windows 10启用REFS文件系统
- Ingress-nginx自定义配置文件
- 文件增量同步之rsync算法