在python-docx中有一个Paragraph method用于在另一个段落之前插入一个段落:
p2 = p.insert_paragraph_before("hello", style='Normal')
假设我们已经有一个已保存的docx文档,其中包含一个表格,我们希望在表格之前插入一个段落,例如一个解释。通过以下方式查找表格相当容易:
for table in document.tables:
...
不幸的是,Table
对象没有insert_paragraph_before
方法。怎么可以实现呢?
答案 0 :(得分:3)
您甚至可以用这种更简单的方式完成
> paragraph = document.add_paragraph('the text you want')
> table._element.addprevious(paragraph._p)
答案 1 :(得分:2)
我会被诅咒......有一个简单的黑客可以解决这个问题:
from docx.oxml.text.paragraph import CT_P
from docx.text.paragraph import Paragraph
def insert_paragraph_before(item, text, style=None):
"""
Return a newly created paragraph, inserted directly before this
item (Table, etc.).
"""
p = CT_P.add_p_before(item._element)
p2 = Paragraph(p, item._parent)
p2.text = text
p2.style = style
return p2
这个想法是方法CT_P.add_p_before
是不可知的:它并不关心项目是否真的是一个段落。它在CT_Tbl
(表)元素上也可以正常工作。
基本上,这个hack包含使用为兄弟类编写的方法,它恰好在这个类的实例上工作。