文本框中的Python docx段落

问题描述 投票:0回答:3

有什么方法可以使用

python-docx
访问和操作文本框中现有 docx 文档中的文本吗?

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

doc = Document('test.docx')

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

如果放置在普通文本中,但不在文本框中,则可以找到。

python python-docx
3个回答
8
投票

仅包含格式化文本的文本框的解决方法是使用浮动格式化表格。它的样式几乎可以像文本框(框架、颜色等)一样,并且可以通过

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)

7
投票

不是通过 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


0
投票

你能从word文档的文本框中找到文本吗?我能够找到它。但我需要用另一个词来代替它。但我在那里挣扎。

© www.soinside.com 2019 - 2024. All rights reserved.