2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > python制作合同模板带图片_办公自动化7_用Python操作Word批量生成合同

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

时间:2024-02-02 08:48:15

相关推荐

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

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

'''

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

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

1.Excel文档中数字需要改成文本格式,不然像合同编号0401在写入到word时会变成0401.0。至于怎么转格式,请参考度娘:/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 ##############

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。