快速批量修改word文档内容

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

用到的库

doc

具体修改的需求

1.批量替换标题中“[ ]”里的内容


用python批量修改文本内容 python批量修改word内容_赋值

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


用python批量修改文本内容 python批量修改word内容_测试报告_02

用python批量修改文本内容 python批量修改word内容_文件名_03

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


用python批量修改文本内容 python批量修改word内容_文件名_04

其他处理

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


用python批量修改文本内容 python批量修改word内容_文件名_05

用python批量修改文本内容 python批量修改word内容_python_06

代码实现

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.最后效果


用python批量修改文本内容 python批量修改word内容_python_07

在处理成百上千的文档时就很方便了。

完整代码

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]))