は、私はあなたがTOCの実際の生成された内容は非段落要素に「ラップ」されていることを見つけると信じています。 python-docx
は、w:document/w:body
要素の直接の子である段落のみを検索するため、直接そこに移動することはありません。
これらを取得するには、できるだけ近くにpython-docxを使用してlxmlレベルまで下げる必要があります。あなたが欲しい部品の特定のXMLの場所を特定し、それらにアクセスするlxmlの/ XPathを使用することができ、そこから
document = Document('my-doc.docx')
body_element = document._body._body
print(body_element.xml) # this will be big if your document is
:あなたはこれでbody要素に(および印刷)を取得することができます。これは、正確なレシピではなく、何w:something
などを動作するようにあなたの部分のいくつかの研究をしている必要があります
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]
が、あなたはそれをしたい場合:次に、あなたのpython-docxファイルに容易にアクセスできるためParagraph
オブジェクトを、それらをラップすることができますこれらのハードルを乗り越えるには十分に悪いですが、このアプローチはうまくいくでしょう。
あなたがそれを働かせたら、あなたの正確な解決策を投稿することは、他の人が検索するのに役立つかもしれません。
私はあなたのヒントでこれを試し始めましたが、xmlファイルを見ると、番号ではなくセクションの名前しか表示されません。たとえば、目次にエントリがある場合:2.3.4 Intro ....... 5、「Intro」は表示されますが、2.3.4は表示されません。それがなぜ起こるか知っていますか?私は数字とテキストが本当に好きです。 (これは自動生成されたToCで、違いがあるかどうかはわかりません)ありがとう – user4500293
TOC XMLブロック全体を表示する必要があります.Gistなどで投稿することができます。しかし、私は、Wordがスタイルや番号付けのプロパティに基づいてそれらの数値を計算しており、冗長性を避けるためにそれらをXMLに記録しないことを期待しています(したがって、2つを同期させておく必要があります)。 – scanny
xmlブロックを含むGistを作成しました。それはhttps://gist.github.com/sendeb/128651f1d13e6156fe741b25488ddcb3です。たとえば、「はじめに」と書かれているセクションを見ると、「1はじめに」などを見たいと思います。助けてくれてありがとう! – user4500293