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 相关文章推荐
python中List的sort方法指南
Sep 01 Python
python中pygame模块用法实例
Oct 09 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
Jun 24 Python
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
Python探索之修改Python搜索路径
Oct 25 Python
使用Python读取大文件的方法
Feb 11 Python
Numpy数组的保存与读取方法
Apr 04 Python
对python中的logger模块全面讲解
Apr 28 Python
浅析Python装饰器以及装饰器模式
May 28 Python
python计算两个地址之间的距离方法
Jun 09 Python
python zip()函数使用方法解析
Oct 31 Python
Python unittest如何生成HTMLTestRunner模块
Sep 08 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
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
PHP中输出转义JavaScript代码的实现代码
2011/04/22 PHP
一个简单至极的PHP缓存类代码
2015/10/23 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
python文件特定行插入和替换实例详解
2017/07/12 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
Quiksilver荷兰官方网站:冲浪和滑雪板
2019/11/16 全球购物
求职简历自荐信
2013/10/20 职场文书
建筑学推荐信
2013/11/03 职场文书
护理个人求职信范文
2014/01/08 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
学生检讨书怎么写
2015/05/07 职场文书
企业计划生育责任书
2015/05/09 职场文书
道歉情书大全
2015/05/12 职场文书
钢琴师观后感
2015/06/12 职场文书