文本框中的Python docx段落

时间:2016-04-27 11:16:05

标签: python python-docx

有没有办法在python-docx的文本框中访问和操作现有docx文档中的文本?

我尝试通过迭代在文档的所有段落中找到关键字:

doc = Document('test.docx')

for paragraph in doc.paragraphs:
    if '<DATE>' in paragraph.text:
        print('found date: ', paragraph.text)

如果放在普通文本中,但不在文本框内,则会被发现。

2 个答案:

答案 0 :(得分:4)

不是通过API,至少还没有。您必须发现它所处的XML结构并转到lxml级别,并且可能需要XPath才能找到它。这样的事情可能是一个开始:

body = doc._body
# assuming differentiating container element is w:textBox
text_box_p_elements = body.xpath('.//w:textBox//w:p')

我不知道textBox是否是这里的实际元素名称,您必须使用其余的XPath路径详细信息对其进行排序,但这种方法可能会有效。我经常使用类似的方法来解决尚未构建到API中的功能。

opc-diag是检查XML的有用工具。基本方法是创建一个最小的.docx文件,其中包含您尝试查找的内容类型。然后使用opc-diag检查保存文件时生成的XML Word:

$ opc browse test.docx document.xml

http://opc-diag.readthedocs.org/en/latest/index.html

答案 1 :(得分:3)

仅包含格式化文本的文本框的解决方法是使用浮动的格式化表。它的样式几乎可以像文本框(框架,颜色等),docx API可以轻松访问。

doc = Document('test.docx')

for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            for paragraph in cell.paragraphs:
                if '<DATE>' in paragraph.text:
                   print('found date: ', paragraph.text)