突出显示插入、删除的元素/文本- Python Docx

waxmsbnn  于 2023-02-10  发布在  Python
关注(0)|答案(1)|浏览(115)

我想在合并两个版本的Docx文件后,突出显示插入或删除的文本或元素。
Here只是返回值。我尝试了下面的代码。它突出显示了整个段落。

def get_accepted_text(p):
    xml = p._t.xml
    if "w:del" in xml or "w:ins" in xml:
        for run in p.runs:
            run.font.highlight_color = WD_COLOR_INDEX.PINK

但我需要,突出文字。
注:Here返回的值

31moq8wy

31moq8wy1#

在行for run in p.runs:你正在设置突出显示为所有运行这不是你想要的东西.下面的片段查找所有运行(包括被跟踪的那些)并且检查如果他们是被包含在跟踪容器w:insw:del内.一旦你找到这些,它是容易的到应用自定义格式在这改变的运行的列表上.

import docx
from docx.text.run import Run
from docx.enum.text import WD_COLOR_INDEX

doc = docx.Document('t1.docx')
ns = "{http://schemas.openxmlformats.org/wordprocessingml/2006/main}"

def iter_changed_runs(doc):
    for p in doc.paragraphs:
        for r in p._p.xpath(f'//w:r'):
            parent = r.getparent()
            if parent.tag in (f'{ns}ins', f'{ns}del'):
                yield Run(r, p)

delta_runs = list(iter_changed_runs(doc))

# change color
for r in delta_runs:
    r.font.highlight_color =  WD_COLOR_INDEX.YELLOW
doc.save('t2.docx')

这是从文档t1.docx的初始文本生成的t2.docx的屏幕截图,文档t1.docx的初始文本是在不使用跟踪功能的情况下编写的,然后在启用跟踪改变的情况下修改。

相关问题