fra*_*lau 4 python python-docx
在 python-docx 中,该paragraph对象有一个方法insert_paragraph_before允许在其自身之前插入文本:
p.insert_paragraph_before("This is a text")
Run Code Online (Sandbox Code Playgroud)
没有insert_paragraph_after方法,但我认为段落对象充分了解自己,可以确定列表中的下一个段落。不幸的是,python-docx AST 的内部工作原理有点复杂(并且没有真正记录)。
我想知道如何使用以下规格对函数进行编程?
def insert_paragraph_after(para, text):
Run Code Online (Sandbox Code Playgroud)
试图理解 docx 的内部工作原理让我头晕,但幸运的是,完成你想要的事情很容易,因为内部对象已经有了必要的方法addnext,这就是我们所需要的:
from docx import Document
from docx.text.paragraph import Paragraph
from docx.oxml.xmlchemy import OxmlElement
def insert_paragraph_after(paragraph, text=None, style=None):
"""Insert a new paragraph after the given paragraph."""
new_p = OxmlElement("w:p")
paragraph._p.addnext(new_p)
new_para = Paragraph(new_p, paragraph._parent)
if text:
new_para.add_run(text)
if style is not None:
new_para.style = style
return new_para
def main():
# Create a minimal document
document = Document()
p1 = document.add_paragraph("First Paragraph.")
p2 = document.add_paragraph("Second Paragraph.")
# Insert a paragraph wedged between p1 and p2
insert_paragraph_after(p1, "Paragraph One And A Half.")
# Test if the function succeeded
document.save(r"D:\somepath\docx_para_after.docx")
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)