<返回更多

500个文件生成不到10秒,Python生成合同不要太方便

2020-09-14    
加入收藏

大家好,我是【Python办公自动化】:闲暇之余分享点文字、编程、设计等干货,希望和你一起成长。

一起学习Python办公自动化,教你快速学习Python的方法,需要代码可以站内私信我。

 

员工求职,企业招聘,最终都以签订劳动合同为主。

本例目标:根据数据库中的人员生成劳动合同。

最终效果:以文件方式生成劳动合同并放置到相应目录下。

技术点:数据库的读取、docxtpl库的使用、元组内数据的访问等。

代码编写方式:采用函数、面向过程方式编写。

由于代码中涉及到的技术点在之前章节都有所讲解,这里就不再赘述。

接下来我们一起进行代码编写,通过2步搞定这个案例。

(1)模板文件。

模板文件见docxtpltemplate劳动合同模板.docx,打开模板文件,可以看到,有7处内容需要更换。分别是甲方公司、乙方人员姓名、乙方部门、乙方职位、甲方人员姓名、乙方人员姓名、时间(年月日),如图所示。

500个文件生成不到10秒,Python生成合同不要太方便

 


500个文件生成不到10秒,Python生成合同不要太方便

 

(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秒不到,效果还不错。

500个文件生成不到10秒,Python生成合同不要太方便

 

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍最近更新
更多资讯 >>>