首页 > 编程语言 >Python批量生成合同文档

Python批量生成合同文档

时间:2022-11-06 18:31:35浏览次数:42  
标签:批量 Python 空调 文档 合同 data datas row

Python批量生成合同文档_python

假设某日我开了一家空调公司,暂且就叫他天强空调安装设备公司吧,假装自己有公司,接了一单大生意,就是给甘肃省的各个高校安装空调(其实这边的气候基本用不到空调,就是假想一下),那么接下来就是面临签订合同,甘肃省这么多高校就得签订几百份合同,有什么快捷方式呢?

毋庸置疑,我们优先使用Python解决这一问题,Python可是实现办公自动化的利器,本节使用Python批量生成合同,学会这个即可解决重复录制合同的问题,下面一起学习~



示例工具:anconda3.7

本文讲解内容:openpyxl、docxtpl库的使用

适用范围:Python批量生成合同




数据获取

公众号后台回复

0630

获取本节的案例数据

Python库安装

首先安装本节需要使用的两个包,openpyxl和docxtpl库,在代码行里面使用下方的命令即可安装完成。

!pip install openpyxl
!pip install docxtpl

当出现Successfully installed的字样时,表明安装成功。

Python批量生成合同文档_python_02

设置合同模板

设置一个合同模板,在文档插入数据的地方插入类似于{{ a }}的标签,传入字典{{ "a": 1234 }} 就能在标签上渲染出数据1234,其他下划线的设置原理均类似。

Python批量生成合同文档_python_03

其实本文使用Python批量生成合同的做法与Word中的邮件合并批量生成合同的做法类似,代码更加灵活和高效。

Python批量生成合同文档_desktop_04

导入合同数据

导入提前录制好的合同数据,包括甲方、乙方、产品名称等字段信息,并且将签约日期转换为字符型。

import pandas as pd
from openpyxl.utils.dataframe import dataframe_to_rows


df = pd.read_excel(r'C:\Users\尚天强\Desktop\各高校空调合同.xlsx')
df["签约日期"] = df["签约日期"].apply(lambda x:x.strftime("%Y-%m-%d"))
datas = []
df

Python批量生成合同文档_python_05

循环遍历每一行数据,并将其存入到一个字典中,使用append函数将这些字典合并,打印结果如下所示。

for row in dataframe_to_rows(df,index=False,header=False):
data = {"甲方": row[0],
"乙方": row[1],
"产品名称": row[2],
"产品价格": row[3],
"保修期": row[4],
"签约日期": row[5]}
datas.append(data)
datas

Python批量生成合同文档_数据分析_06

此外还可以使用openpyxl库将合同数据导入字典,原理与上面代码导入的方式一样。

from openpyxl import load_workbook


wb = load_workbook(r'C:\Users\尚天强\Desktop\各高校空调合同.xlsx')
ws = wb['Sheet1']
datas = []


for row in range(2, ws.max_row):
A = ws[f"A{row}"].value
B = ws[f"B{row}"].value
C = ws[f"C{row}"].value
D = ws[f"D{row}"].value
E = ws[f"E{row}"].value
F = ws[f"F{row}"].value
F = F.strftime("%Y-%m-%d")
data = {"甲方": A,
"乙方": B,
"产品名称": C,
"产品价格": D,
"保修期": E,
"签约日期": F}
datas.append(data)
datas

插入合同数据

导入docxtpl库,提前导入之前创建的合同文档模板,使用render函数渲染{}中的内容,从而达到批量插入数据的目的。

from docxtpl import DocxTemplate


for data in datas:
tpl = DocxTemplate(r'C:\Users\尚天强\Desktop\各高校安装空调合同书.docx')
tpl.render(data)
tpl.save(r'C:\Users\尚天强\Desktop\合同生成\{}的空调安装合同.docx'.format(data['甲方']))
print('{}的空调安装合同......已生成'.format(data['甲方']))

Python批量生成合同文档_python_07

代码封装

将以上所有的代码进行封装,一键运行,即可得到如下生成的docx合同文档。

import pandas as pd
from openpyxl.utils.dataframe import dataframe_to_rows
from docxtpl import DocxTemplate


df = pd.read_excel(r'C:\Users\尚天强\Desktop\各高校空调合同.xlsx')
df["签约日期"] = df["签约日期"].apply(lambda x:x.strftime("%Y-%m-%d"))
datas = []


for row in dataframe_to_rows(df,index=False,header=False):
data = {"甲方": row[0],
"乙方": row[1],
"产品名称": row[2],
"产品价格": row[3],
"保修期": row[4],
"签约日期": row[5]}
datas.append(data)


for data in datas:
tpl = DocxTemplate(r'C:\Users\尚天强\Desktop\各高校安装空调合同书.docx')
tpl.render(data)
tpl.save(r'C:\Users\尚天强\Desktop\合同生成\{}的空调安装合同.docx'.format(data['甲方']))
print('{}的空调安装安装合同已生成'.format(data['甲方']))

Python批量生成合同文档_desktop_08

打开任意的一个合同书,我们看到已经在原有的下划线处插入了合同数据。

Python批量生成合同文档_python_09

以上就是作者使用Python写了一个小脚本,轻松实现批量生成合同文档,大家可以亲自动手实现一下,解决重复的手工劳动,刻不容缓,学习Python办公自动化正当时。


如上视频演示即代码实现过程

后台回复数据分析入门,获取数据分析入门资料

加入数据分析资料群,一起交流数据分析知识



三年互联网数据分析经验,擅长Excel、SQL、Python、PowerBI数据处理工具,数据可视化、商业数据分析技能,统计学、机器学习知识,持续创作数据分析内容。


标签:批量,Python,空调,文档,合同,data,datas,row
From: https://blog.51cto.com/u_15828536/5827522

相关文章

  • python学习第五周总结
    面向对象前戏之人狗大战#编写代码简单的实现人打狗狗咬人的小游戏(剧情需要)"""推导步骤1:代码定义出人和狗"""person1={'name':'jason','age':18,......
  • python 单元测试
    importunittestclassMyTestCase(unittest.TestCase):deftest_something(self):self.assertEqual(0,False)if__name__=='__main__':unitte......
  • python 协程
    什么是协程、异步举个例子:假设有1个洗衣房,里面有10台洗衣机,有一个洗衣工在负责这10台洗衣机。那么洗衣房就相当于1个进程,洗衣工就相当1个线程。如果有10个洗衣工,就相当于1......
  • Python周总结——面向对象
    Python周总结——面向对象编程思想'''面对过程编程: 过程即流程,面向过程就是按照固定的流程解决问题 需要列举出每一步的流程,并且随着步骤的深入,问题的解决也越来越简......
  • 学习python第七天
    importdatetimex=datetime.datetime.now()print(x)Python中的日期不是其自身的数据类型,但是我们可以导入名为 datetime 的模块,把日期视作日期对象进行处理。日期......
  • 批量给UDP_Server发消息
    Server端     客户端:  运行结果: ......
  • 8,批量处理单元格判断数据,分数筛选
    #批量处理单元格判断数据,分数筛选function分数筛选(){ varArr1=[]; varArr2=Range("a2:b13").Value(); for(vararofArr2){ if(ar[1]>=100){ Arr1.push(a......
  • Python主要的应用领域有哪些?
    作为一个实用主义的学习者,最关心的问题一定是“我为什么要选择学Python,学会之后我可以用来做什么?”。在上篇《为什么选择Python入门》文章中,我们已经明白了为什么选择学......
  • 最新有效,蜻蜓fm vip音频批量下载器!
    修改后的蜻蜓fm电脑版音频批量下载软件(如有会员也可下会员内容)。 可下的音频文件,电脑版提供什么就下什么,提供音频批量下载,已下过的忽略掉。 蜻蜓fm音频下载器,支持爬......
  • 亲测可用,给力推荐!蜻蜓FM专辑批量下载工具
    给大家推荐一款最新自己在使用的蜻蜓FM专辑批量下载工具,下载好,直接就是MP3格式,而且还带有名称。 那么能不能下载vip资源呢? 这款下载工具经我测试没有任何问题的,,是可......