########## 实例7:用Python操作Word批量生成合同 ################

'''

来源网上整理 ,供学习使用。

我们建立的模板和合同信息如下图所示:这里有几个注意事项:

1.Excel文档中数字需要改成文本格式,不然像合同编号20190401在写入到word时会变成20190401.0。至于怎么转格式,请参考度娘:https://jingyan.baidu.com/article/ae97a646b3d0b7bbfc461d68.html

2.Excel中的公式需要去除,不然填到word中的信息是公式,而不是值。

3.Word模板中的“【....】”和Excel中的标题必须一一对应,且必须是全中文或全英文字符,因为python-docx会将中英混合的内容视为两个及以上的格式(run),导致在替换的时候无法正确识别。

4.Word模板做好后,要用python-docx读取一下,看看“【....】”是不是一个独立的run,若不是,则需要从Excel标题栏中重新复制,覆盖word模板中的“【....】”信息,已保证这一串字符是一个run。

'''

import docx #导入docx库

from docx import Document

doc = Document("data/合同模板.docx") #打开word文件

for para in doc.paragraphs: #读取word中的每个段落

for run in para.runs: #读取每个段落中的不同格式(run)

print(run.text)

for table in doc.tables:

for row in table.rows:

for cell in row.cells:

print(cell.text)

for table in doc.tables:

for row in table.rows:

for cell in row.cells:

print(cell.text)

####################################

from docx import Document

import docx

def info_update(doc,old_info, new_info):

'''此函数用于批量替换合同中需要替换的信息

doc:合同模板

old_info和new_info:原文字和需要替换的新文字

'''

#读取段落中的所有run,找到需替换的信息进行替换

for para in doc.paragraphs: #

for run in para.runs:

run.text = run.text.replace(old_info, new_info) #替换信息

#读取表格中的所有单元格,找到需替换的信息进行替换

for table in doc.tables:

for row in table.rows:

for cell in row.cells:

cell.text = cell.text.replace(old_info, new_info) #替换信息

from openpyxl import load_workbook #用于读取Excel中的信息

wb = load_workbook('data/合同信息.xlsx')

ws = wb.active

doc = docx.Document("data/合同模板.docx")

for row in range(2, ws.max_row+1):

for col in range(1, ws.max_column+1):

#调用上面建立的函数,替换信息

info_update(doc,str(ws.cell(row=1,column=col).value), str(ws.cell(row=row,column=col).value))

doc.save("data/{}合同.docx".format(str(ws.cell(row=row,column=3).value)))

doc = docx.Document("data/合同模板.docx")

'''

调试后发下合同保存过程doc内容会变化,这就导致下次循环run与excle第一行不一致了,因此old_info不会被替换了,

所有合同都跟生成的第一份一样,解决方法是在doc.save下一段加上“doc = docx.Document("data/合同模板.docx")“

把doc重置为模版

'''

print("{}合同完成".format(str(ws.cell(row=row,column=3).value)))

print("succed")

########### end ##############

python制作合同模板带图片_办公自动化7_用Python操作Word批量生成合同相关推荐

  1. python制作合同模板带图片_Python操作Word批量生成合同的实现示例

    背景:大约有3K家商家需要重新确认信息并签订合同.合同是统一的Word版本.每个供应商需要修改合同内的金额部分.人工处理方式需要每个复制粘贴且金额要生成大写金额.基于重复工作可偷懒.用Python解救 ...

  2. python批量生成word报告_Python操作Word批量生成合同的实现示例

    背景:大约有3K家商家需要重新确认信息并签订合同.合同是统一的Word版本.每个供应商需要修改合同内的金额部分.人工处理方式需要每个复制粘贴且金额要生成大写金额.基于重复工作可偷懒.用Python解救 ...

  3. python制作合同模板带图片_python生成各类合同

    安装包 pip install  python_docx pip install xlrd 代码示例 from docx import Document import xlrd def change_ ...

  4. python代码画樱花带图片_用python画一颗樱花树(不同品种) 实现代码:

    原博文 2019-12-31 14:56 − 动态生成樱花效果图(这个是动态的): 实现代码: 1 import turtle as T 2 import random 3 import time 4 ...

  5. 步骤条自定义图片_小技巧丨如何使用word批量调整图片大小?

    导Lead语 不知道你们有没有遇到需要批量修改图片尺寸的难题?那么,在大量图片的前提下,如何才能快速修改呢? 今天就和大家分享一下我当初的解决方法: 1F在word中添加 选择多个对象功能 新建一个W ...

  6. python批量生成合同

    对于批量操作合同文件,逐个去比对替换文件,复制粘贴是个很费劲的事,于是乎有了python自动化批量操作的这种神器. 工具原料: openpyxl模块–用于操作excel文档 python-docx模块 ...

  7. python教程112-Python批量生成合同文档

    Python可是实现办公自动化的利器,本文使用Python批量生成合同,学会这个即可解决重复制作合同的问题 开发系统 :window10家庭版 示例工具:anconda3.7 python3.8 本文 ...

  8. 使用python的zipfile模块巧解word批量生成问题

    使用python的zipfile模块巧解word批量生成问题 任务需求 任务拆解 任务方案 方案一:使用python-docx.Document读取word文档 方案二:zipfile巧解word文档 ...

  9. python docx 合并文档 图片_不再为处理PDF烦恼,python处理操作PDF全攻略

    本篇聊下Python对pdf的各种操作,包含pdf转word,pdf转图片,pdf翻转,加密,加水印等. pdf转换word文档 保留格式 pdf转换为word文档,被大众经常使用的是纯Python库 ...

最新文章

  1. 大量LAST_ACK 的分析过程
  2. 【学习笔记】树上启发式合并
  3. 限制IP 访问 Oracle 的方法
  4. 【c++】iostreeam中的类为何不可以直接定义一个无参对象呢
  5. 企业必备:商业智能中应该具备的3种仪表盘(Dashboards)
  6. oracle group by用法_从OceanBase TPCC测试报告看ORACLE兼容性进展
  7. [恢]hdu 2021
  8. list mybatis批量保存_springboot2.x基础教程:集成mybatis最佳实践
  9. 吴恩达机器学习练习4:神经网络学习(损失函数和正则化)
  10. 用几个最简单的例子带你入门 Python 爬虫
  11. 秋招很倒霉,但最终还是触底反弹了
  12. SSH终端仿真器:ZOC 8 for Mac
  13. 九型人格在招聘中的应用策略
  14. 一些黑苹果四叶草引导常用的kext说明
  15. Opencv -- 13像素值统计及平均值和方差的意义
  16. Window 配置RabbitMQ
  17. N多计算机精品免费视频下载,不要别后悔啊
  18. 【整理】linux学习笔记整理8
  19. HR问“什么时间可以入职”,这样回答最保险!
  20. 外汇天眼:央行人民币降息意味着什么?有什么影响?

热门文章

  1. linux脚本等待10s,bash – 按Enter键或等待10秒钟以继续
  2. Spring cloud 微服务架构之Ribbon/Fegin连接超时ReadTimeout问题
  3. 【Spring Boot】Spring Boot之整合RabbitMQ并实现消息的发送和接收
  4. SpringBoot中修改tomcat最大连接数、最大线程数、最大等待数
  5. mysql连接查询优点_1105 ROM优缺点,MySQL连接类,查插更方法
  6. 获取程序进程并杀死该进程集
  7. 设计模式:给你生产一个女朋友---工厂方法模式
  8. Scality试图将对象存储转移到磁带和云中
  9. 《微课实战:Camtasia Studio入门精要》——第2章 录制视频 2.1 录制视频基本常识...
  10. 《PHP和MySQL Web开发从新手到高手(第5版)》一一1.7 万事俱备,摩拳擦掌