有没有办法在python-docx
的文本框中访问和操作现有docx文档中的文本?
我尝试通过迭代在文档的所有段落中找到关键字:
doc = Document('test.docx')
for paragraph in doc.paragraphs:
if '<DATE>' in paragraph.text:
print('found date: ', paragraph.text)
如果放在普通文本中,但不在文本框内,则会被发现。
答案 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
答案 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)