我想为MS Word文本中的更正单词设置样式。 由于无法在运行中更改文本样式,因此我想在现有段落中插入具有新样式的新运行...
for p in document.paragraphs:
for run in p.runs:
if 'text' in run.text:
new_run= Run()
new_run.text='some new text'
# insert this run into paragraph
# smth like:
p.insert(new_run)
如何做到?
p.add_run()
将运行添加到段落末尾,不是吗?
最好的方法是能够克隆运行(并在特定运行后插入)。这样,我们可以在新的/克隆的中复制原始运行的样式属性。
我可以管理该插入代码:
if 'text' in run.text:
new_run_element = CT_R() #._new()
run._element.addnext(new_run_element)
new_run = Run(new_run_element, run._parent)
...
但是之后:
答案 0 :(得分:3)
对此没有API支持,但可以在oxml / lxml级别轻松实现:
from docx.text.run import Run
from docx.oxml.text.run import CT_R
# ...
for run in p.runs:
if 'text' in run.text:
new_run_element = p._element._new_r()
run._element.addnext(new_run_element)
new_run = Run(new_run_element, run._parent)
# ---do things with new_run, e.g.---
new_run.text = 'Foobar'
new_run.bold = True
如果要在现有运行之前插入新运行,请使用run._element.addprevious(new_run_element)
。这两个是lxml.etree._Element
类的方法,所有python-docx
元素都是子类。
https://lxml.de/api/lxml.etree._Element-class.html