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连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
Python multiprocessing模块中的Pipe管道使用实例
Apr 11 Python
Python进阶_关于命名空间与作用域(详解)
May 29 Python
Python设计模式之门面模式简单示例
Jan 09 Python
selenium+python实现1688网站验证码图片的截取功能
Aug 14 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
Sep 03 Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 Python
Django restframework 框架认证、权限、限流用法示例
Dec 21 Python
python将音频进行变速的操作方法
Apr 08 Python
python numpy实现rolling滚动案例
Jun 08 Python
Python中X[:,0]和X[:,1]的用法
May 10 Python
教你用Python matplotlib库制作简单的动画
Jun 11 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
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
php 文件缓存函数
2011/10/08 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
解决python测试opencv时imread导致的错误问题
2019/01/26 Python
python字典的遍历3种方法详解
2019/08/10 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
python列表生成器迭代器实例解析
2019/12/19 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
500行python代码实现飞机大战
2020/04/24 Python
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
如何写出好的Java代码
2014/04/25 面试题
中学教师教育感言
2014/02/21 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
学习群众路线的心得体会
2014/11/05 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
2015年教研组工作总结
2015/05/04 职场文书
晚会开场白和结束语
2015/05/29 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
SQL 聚合、分组和排序
2021/11/11 MySQL
Python使用永中文档转换服务
2022/05/06 Python