前提・実現したいこと
MS Word文書内における、指定した文字列を検索するプログラムを作成しています。
(grep的な処理)
文字列がヒットした場合、その文字列が文書内の何ページ目にあるかを返したいです。
発生している問題
指定した文字列が存在する段落(Paragraph)を返すことはできたのですが、
ページの指定方法がわかりません。
作成中のソースコード
指定した文字列が存在する段落を返すコードです。
python
1from docx import Document 2 3file = '検索するWord文書' 4s_str= '検索する文字列' 5document = Document(file) 6count = 0 7for para in document.paragraphs: 8 if para.text.find(s_str) > -1: 9 print(count) 10 count += 1
試したこと
公式ドキュメントを見ましたが、該当の情報は見つかりませんでした。
https://python-docx.readthedocs.io/en/latest/index.html
ヘッダー/フッターにページ番号を挿入する方法はあったのですが、
既存の文書から検索する方法がどうしてもわかりません。
補足情報(FW/ツールのバージョンなど)
Windows 10 Pro 54bit
Python 3.8.10
Word for Microsoft 365 MSO 64bit
見た目のページの区切りってフォントの大きさや行間の幅、ページの余白、ページサイズ、ヘッダーやフッターのサイズ等々ですぐ変化するので、果たして「ページ番号」というのを静的な情報として持っているのか、それとも印刷や印刷ビューの時に動的に生成されているのかですよね。
実際のワードファイルがどうかはわかりませんが、python-docxのドキュメントやオブジェクトのプロパティをざっと見てみた限りでは、確かに少なくともpython-docxはページ番号の情報は持っていないような感じはします。
確信は持てないので、あくまで感想ということで、こちらにコメントさせていただきました。
ヘッダー/フッターにページ番号を挿入するのってどうやってするのですか?
やはりpython-docxでは難しそうですね。
>ヘッダー/フッターにページ番号を挿入するのってどうやってするのですか?
→こちら私の勘違いで、python-docx単体ではできませんでした…申し訳ないです。
(一応質問本文も修正いたしました)
http://cup.sakura.ne.jp/use_markdown/usepandoc.html#session-ex25
↑
代替案としては、こちらで紹介されているように、ページ番号を付加したテンプレートを別に用意してそれを読み込むという方法になろうかと思います。
回答1件
あなたの回答
tips
プレビュー