python-docx:在表之前插入一个段落

时间:2018-02-28 08:28:22

标签: python python-docx

在python-docx中有一个Paragraph method用于在另一个段落之前插入一个段落:

p2 = p.insert_paragraph_before("hello", style='Normal')

假设我们已经有一个已保存的docx文档,其中包含一个表格,我们希望在表格之前插入一个段落,例如一个解释。通过以下方式查找表格相当容易:

for table in document.tables:
    ...

不幸的是,Table对象没有insert_paragraph_before方法。怎么可以实现呢?

2 个答案:

答案 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包含使用为兄弟类编写的方法,它恰好在这个类的实例上工作。