python生成word合同的实例方法


Posted in Python onJanuary 12, 2021

在企业招聘中,最重要的事情,就是需要签订劳动合同,但是有些大的公司,因为人员过于,在设置编辑合同的时候,比较耗时耗力,编程存在的意义,就是帮助我们实现办公自动化,因此能实现自动生成合同,还是非常重要的,下面小编就来采用函数以及面向对象过程,教大家实现生成合同过程。

1、模板文件

甲方公司、乙方人员姓名、乙方部门、乙方职位、甲方人员姓名、乙方人员姓名、时间(年月日),如图所示。

python生成word合同的实例方法

2、实现代码

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}")

3、输出结果

python生成word合同的实例方法

实例扩展(批量WORD合同生成)

导入数据库

#导入对应数据库
import numpy as np 
import pandas as pd 
import os 
import docx
from docx.shared import Pt
from docx.oxml.ns import qn
#修改项目文件地址
os.chdir(r'C:\Users\WIN7\Desktop\分期账单自动化')
os.getcwd()

全部代码:

'''
人民币数字转大写汉字
'''
# coding: utf-8
import warnings
from decimal import Decimal

def cncurrency(value, capital=True, prefix=False, classical=None):
 '''
 参数:
 capital: True 大写汉字金额
    False 一般汉字金额
 classical: True 元
    False 圆
 prefix:  True 以'人民币'开头
    False, 无开头
 '''
 if not isinstance(value, (Decimal, str, int)):
  msg = '''
  由于浮点数精度问题,请考虑使用字符串,或者 decimal.Decimal 类。
  因使用浮点数造成误差而带来的可能风险和损失作者概不负责。
  '''
  warnings.warn(msg, UserWarning)
 # 默认大写金额用圆,一般汉字金额用元
 if classical is None:
  classical = True if capital else False
  
 # 汉字金额前缀
 if prefix is True:
  prefix = '人民币'
 else:
  prefix = ''
  
 # 汉字金额字符定义
 dunit = ('角', '分')
 if capital:
  num = ('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖')
  iunit = [None, '拾', '佰', '仟', '万', '拾', '佰', '仟','亿', '拾', '佰', '仟', '万', '拾', '佰', '仟']
 else:
  num = ('?', '一', '二', '三', '四', '五', '六', '七', '八', '九')
  iunit = [None, '十', '百', '千', '万', '十', '百', '千','亿', '十', '百', '千', '万', '十', '百', '千']
 if classical:
  iunit[0] = '元' if classical else '圆'
 # 转换为Decimal,并截断多余小数

 if not isinstance(value, Decimal):
  value = Decimal(value).quantize(Decimal('0.01'))

 # 处理负数
 if value < 0:
  prefix += '负'   # 输出前缀,加负
  value = - value   # 取正数部分,无须过多考虑正负数舍入
        # assert - value + value == 0
 # 转化为字符串
 s = str(value)
 if len(s) > 19:
  raise ValueError('金额太大了,不知道该怎么表达。')
 istr, dstr = s.split('.')   # 小数部分和整数部分分别处理
 istr = istr[::-1]     # 翻转整数部分字符串
 so = []  # 用于记录转换结果
 
 # 零
 if value == 0:
  return prefix + num[0] + iunit[0]
 haszero = False  # 用于标记零的使用
 if dstr == '00':
  haszero = True # 如果无小数部分,则标记加过零,避免出现“圆零整”
  
 # 处理小数部分
 # 分
 if dstr[1] != '0':
  so.append(dunit[1])
  so.append(num[int(dstr[1])])
 else:
  so.append('整')   # 无分,则加“整”
 # 角
 if dstr[0] != '0':
  so.append(dunit[0])
  so.append(num[int(dstr[0])])
 elif dstr[1] != '0':
  so.append(num[0])  # 无角有分,添加“零”
  haszero = True   # 标记加过零了
  
 # 无整数部分
 if istr == '0':
  if haszero:    # 既然无整数部分,那么去掉角位置上的零
   so.pop()
  so.append(prefix)  # 加前缀
  so.reverse()   # 翻转
  return ''.join(so)

 # 处理整数部分
 for i, n in enumerate(istr):
  n = int(n)
  if i % 4 == 0:   # 在圆、万、亿等位上,即使是零,也必须有单位
   if i == 8 and so[-1] == iunit[4]: # 亿和万之间全部为零的情况
    so.pop()      # 去掉万
   so.append(iunit[i])
   if n == 0:       # 处理这些位上为零的情况
    if not haszero:     # 如果以前没有加过零
     so.insert(-1, num[0])  # 则在单位后面加零
     haszero = True    # 标记加过零了
   else:        # 处理不为零的情况
    so.append(num[n])
    haszero = False     # 重新开始标记加零的情况
  else:         # 在其他位置上
   if n != 0:       # 不为零的情况
    so.append(iunit[i])
    so.append(num[n])
    haszero = False     # 重新开始标记加零的情况
   else:        # 处理为零的情况
    if not haszero:     # 如果以前没有加过零
     so.append(num[0])
     haszero = True

 # 最终结果
 so.append(prefix)
 so.reverse()
 return ''.join(so)

到此这篇关于python生成word合同的实例方法的文章就介绍到这了,更多相关如何使用python生成word合同内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python3.3教程之模拟百度登陆代码分享
Jan 16 Python
Python探索之自定义实现线程池
Oct 27 Python
基于python实现百度翻译功能
May 09 Python
python set内置函数的具体使用
Jul 02 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
Python Des加密解密如何实现软件注册码机器码
Jan 08 Python
Python实现ATM系统
Feb 17 Python
python数据预处理方式 :数据降维
Feb 24 Python
Python中的特殊方法以及应用详解
Sep 20 Python
Python基于Faker假数据构造库
Nov 30 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 Python
python中常用的数据结构介绍
Jan 12 #Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 #Python
python3 kubernetes api的使用示例
Jan 12 #Python
python excel和yaml文件的读取封装
Jan 12 #Python
python drf各类组件的用法和作用
Jan 12 #Python
Python try except else使用详解
Jan 12 #Python
python 逆向爬虫正确调用 JAR 加密逻辑
Jan 12 #Python
You might like
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
php编写的抽奖程序中奖概率算法
2015/05/14 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
2014/09/01 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
2015/02/13 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
Python pymongo模块常用操作分析
2018/09/01 Python
Python3中关于cookie的创建与保存
2018/10/21 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
Python timeit模块的使用实践
2020/01/13 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
Python Numpy 控制台完全输出ndarray的实现
2020/02/19 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
python的launcher用法知识点总结
2020/08/07 Python
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
三星法国官方网站:Samsung法国
2019/10/31 全球购物
经贸日语专业个人求职信
2013/12/13 职场文书
交通安全演讲稿
2014/01/07 职场文书
医药营销个人求职信范文
2014/02/07 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫