快速批量修改word文档内容
在工作中可能经常遇到需要对word中同一位置的内容进行批量修改或者替换,如果数据量小,手动改一改就可以了,但是遇到大量的修改,再用手动修改的方法的话,工作量就变得很大了,重复的复制粘贴也极容易出错,所以接下来给大家介绍一个用Python实现批量修改word文档内容的方法。给定一个word,然后批量替换并保存。
用到的库
doc
具体修改的需求
1.批量替换标题中“[ ]”里的内容

2.批量替换word表格里的内容(两个表格里的替换的内容相同)


3.保存时文件名的替换(文件名与文档标题相同)

其他处理
将需要替换的文件名和表格内容分别放在两个txt文档


代码实现
1.导包
from docx import Document
包就不做介绍了。
2.读取两个txt文档
with open("D:\\测试报告\\filename.txt",encoding='utf8') as fp:
filename=fp.read().split("\n")
fp.close()
with open("D:\\测试报告\\chengxu.txt",encoding='utf8') as fp:
chengxu=fp.read().split("\n")
fp.close()
因为txt文档里的内容是一行一个数据,所以我们用split方法制定分隔符为换行符进行切片,文件打开后记得关闭,不关闭就会导致文件一直被占用,无法进行其他操作。
3.使用Document()方法读取模板word文档
doc=Document("D:\\测试报告\\XXXX分析系统[XXXXXX接口需求0720]新业务测试报告.docx")
4.修改文档标题
for i in range(len(filename)):
paragraphs=doc.paragraphs #获取文档对象
paragraphs[1].text="[{}]开发测试报告".format(filename[i])
runs=paragraphs[1].runs #字体信息都包含在runs对象里
title=runs[0] #runs是一个列表对象
title.font.name='宋体'
title.font.bold=True #字体加粗
title.font.size=203200
循环遍历读取txt里的标题,获取word文档的段落对象,因为需要修改的标题在第二行
,所以用paragraphs[1].text来表示第二行的内容。这里用了format方法来进行格式化。因为要保证修改后的内容的格式与原来的一样,所以在这之前先获得了标题的字体信息,现在直接对修改后的标题自字体的类型和大小进行赋值即可。
5.修改表格里的内容
tables=doc.tables #获取表格对象
tables[1].cell(1,0).text="1、 {}".format(chengxu[i]) #赋值需要替换的表格内容
tables[2].cell(8,2).text="{}".format(chengxu[i]) #赋值需要替换的表格内容
tables[1]._cells[5].paragraphs[0].runs[0].font.name='宋体'
tables[1]._cells[5].paragraphs[0].runs[0].font.size=114300
tables[1]表示word里的第二个表格,cell(1,0)表示表格的第2行第1列,其他同理。_cells[5]表示第五个单元格。
6.文档的保存
doc.save("D:\\测试报告\\XXXX分析系统[{}]新业务测试报告.docx".format(filename[i]))
7.最后效果

在处理成百上千的文档时就很方便了。
完整代码
from docx import Document
with open("D:\\测试报告\\filename.txt",encoding='utf8') as fp:
filename=fp.read().split("\n")
fp.close()
with open("D:\\测试报告\\chengxu.txt",encoding='utf8') as fp:
chengxu=fp.read().split("\n")
fp.close()
doc=Document("D:\\测试报告\\XXXX分析系统XXXXXX接口需求0720]新业务测试报告.docx")
for i in range(len(filename)):
paragraphs=doc.paragraphs
paragraphs[1].text="[{}]开发测试报告".format(filename[i])
runs=paragraphs[1].runs
title=runs[0]
title.font.name='宋体'
title.font.bold=True
title.font.size=203200
tables=doc.tables
tables[1].cell(1,0).text="1、 {}".format(chengxu[i])
tables[2].cell(8,2).text="{}".format(chengxu[i])
tables[1]._cells[5].paragraphs[0].runs[0].font.name='宋体'
tables[1]._cells[5].paragraphs[0].runs[0].font.size=114300
doc.save("D:\\测试报告\\结果\\XXXX分析系统[{}]新业务测试报告.docx".format(filename[i]))