我相信你會發現TOC的實際生成的內容是在非段落元素「包裝」。 python-docx
不會直接找到您,因爲它只會找到w:document/w:body
元素的直接子元素的段落。
爲了解決這些問題,您需要使用python-docx儘可能地接近lxml級別。你可以得到(和打印)body元素與此:
document = Document('my-doc.docx')
body_element = document._body._body
print(body_element.xml) # this will be big if your document is
從那裏,你可以找出你想要的部分的特定XML位置,並使用LXML/XPath來訪問它們。然後你就可以在python-的docx包起來Paragraph
對象爲準備訪問:
from docx.text.paragraph import Paragraph
ps = body_element.xpath('./w:something/w:something_child/w:p'
paragraphs = [Paragraph(p, None) for p in ps]
這不是一個準確的配方,並要求你做一些研究工作什麼w:something
等都是,但如果你想它足以克服這些障礙,這種方法將起作用。
一旦你得到它的工作,發佈你的確切解決方案可能會幫助其他人在搜索。
我開始嘗試使用你的提示,但是當我看到xml文件時,我只能看到該部分的名稱,而不是數字。例如,如果目錄中有條目:2.3.4簡介....... 5,我看到「簡介」但不是2.3.4。你知道這是爲什麼嗎?我真的很喜歡這個數字和文字。 (這是一個自動生成的ToC,不知道這是否有所作爲。)謝謝 – user4500293
我將不得不看到整個TOC XML塊,也許你可以發佈它在一個Gist或其他東西。但我希望Word可以根據樣式或編號屬性計算這些數字,並且不會將它們記錄在XML中以避免冗餘(因此需要保持兩者同步)。 – scanny
我做了一個包含xml塊的Gist。它在:https://gist.github.com/sendeb/128651f1d13e6156fe741b25488ddcb3。例如,如果您查看「簡介」部分,我希望看到「1簡介」等。感謝您的幫助! – user4500293