使用python替换word文档部分内容

人生苦短,我用python。

工具

这里我们使用python-docx库, 关于这个库的使用可以参考官方文档

使用

  • 第一种:如果不在乎原有文章的格式,比如把word文档里的需要替换的字符串替换成我是替换后的字符串可以使用以下代码
      doc = docx.Document('test.docx')
      for paragraph in doc.paragraphs:
          if '需要替换的字符串' in p.text:
              p.text = p.text.replace('需要替换的字符串', '我是替换后的字符串')
      doc.save('result_test.docx')
    

    这种替换方式有个问题就是,不能保持原有的格式, 比如需要替换的字符串是带下划线并、加粗、黑体,替换之后这些格式都不存在了,但这也是最简单部分的替换方式。

  • 第二种: 既然第一种有问题,那么我们想要保持原有的文档格式,怎么办?我们只能更改里面的文字块,再python-docx库中文字块叫run,特殊就是这个run并不是我们我们想象的那样是连续的,这里盗了个图,这里感谢这位博主的图。
    《使用python替换word文档部分内容》

从图中可以看出,run是paragraph的最小单元,所以待会儿取得时候我们只能拿到段落我们才能找到run,再说run得特殊性, 比如需要替换的字符串这几个字可能是多个run, 可能是两个run,分别是’需要替换的’, ‘字符串’。直接上代码:

doc = docx.Document('my_template.docx')
for paragraph in doc.paragraphs:
    tmp = ''
    runs = paragraph.runs
    for i, run in enumerate(runs):
        tmp += run.text # 合并run字符串
        if '需要替换的字符串' in tmp:
            # 如果存在匹配得字符串,那么将当前得run替换成合并后得字符串
            run.text = run.text.replace(run.text, tmp)
            run.text = run.text.replace('需要替换的字符串', '我是替换后的字符串')
            tmp = ''
        else:
            # 如果没匹配到目标字符串则把当前run置空
            run.text = run.text.replace(run.text, '')
        if i == len(runs) - 1:
            # 如果是当前段落一直没有符合规则得字符串直接将当前run替换为tmp
            run.text = run.text.replace(run.text, tmp)

以上就是两种替换方式,可以看需求使用

    原文作者:HiZhg
    原文地址: https://blog.csdn.net/oLianyou1/article/details/120758735
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞