OfficeをPythonで(6)
Excelのフッターにページ番号(とか)を設定してみた
どもです。
前回のエントリで、WORDのフッターにはフィールドを設定できない、というエントリを書きました。
その後、「ではExcelはどうなんだろう?」と思い、試してみました。
そんなわけで今回は、「Excelのフッターに、pythonでページ番号を設定してみた」という内容について書いてみます。
0. 開発環境
今回のエントリの内容で使用した開発環境は、以下の通りです。
項目 | python 3.10.2 |
---|---|
ライブラリ | openpyxl 3.0.9 |
Excel | 2013 |
1. 手動で設定してみる
pythonで試す前に、まず手動でExcelにページ番号を設定してみます。
手動でのページ番号の設定手順は、以下の通りです。
- [ページレイアウト]-[ページ設定]の右下の矢印?を選択して、「ページ設定」ダイアログを表示する。
- 表示された「ページ設定」ダイアログ」内の「ヘッダー/フッター」タブを選択して、ヘッダーとフッターの設定画面を表示します。
- この画面の「フッターの編集(U)…」ボタンを押下することで、フッターの編集画面が表示されます。
- ページ番号を設定するフッターの場所(今回は「中央部」)にカーソルを移動させて「ページ番号の挿入」ボタンを押下すれば、ページ番号が挿入されます。
2. pythonで設定してみる
試しに、「ページ番号」をpythonで設定してみます。
Excelのヘッダー/フッターは、この手順で示したように「&[ページ番号]」と設定することでページ番号が挿入されます。なので、pythonでもこの文字列を設定してみます。設定するためのコードは、以下。
dpath = r'/path/to/target/xlsx/file.xlsx'
footer = '&[ページ番号]'
wb = openpyxl.load_workbook(path)
sheets = wb.worksheets
for sheet in sheets:
footer_part = sheet.oddFooter.center
footer_part.text = footer
wb.save(path)
wb.close()
で。
このコードを実行した結果は、以下の通りです。
設定画面では、期待通りの値が設定できています。
しかしページ設定画面、および印刷プレビューで確認してみると、期待したような表示にはなっていませんでした。
このことから、pythonでのExcelのフッターへのページ番号の挿入は、バカ正直に「&[ページ番号]」という文字列を設定してもできない、ということが分かりました。
3. 何を設定したらよい?
ここまででの内容から、
「&[ページ番号]」を設定しても、Excelファイルには何か違う値が設定されている。
ということが推測されます。
そこで、この「&[ページ番号]」という設定が、エクセルファイルの本体(?)でどのように設定されているか確認してみます。
3.1. 試し設定してみる
「&[ページ番号」に対する実際の設定値を確認するために、タグとして「sample_file-&[ページ番号]」と設定します。
設定手順は、ココで示した通りです。
3.2. 試しに設定した内容を確認する
設定が完了したら、エクセルファイルの拡張子を「.xlsx」から「.zip」に変換して解凍します。
ついて、以下のパスのファイルを開きます。
./xl/worksheets/sheet1.xml
ファイル名の「sheet1」は、シート名の設定によって変化しますので、設定によっては子の通りではない場合があります。
このファイルを任意のエディタで開き、3.1. 試し設定してみるで設定した文字列(sample_file-)を検索します。
結果として、以下のような表示が見つかります。
設定した文字列の後ろの「amp;P」の記載から、コレが「&[ページ番号]」に対応していると考えられます。
4. 改めてやってみよう
4.1. 改めてやってみる
ページ番号の設定方法が推測できたので、その推測内容を改めて試して見ます。
試す際に実行するコードは以下:
dpath = r'/path/to/target/xlsx/file.xlsx'
footer = 'sample_demo_file-&p'
wb = openpyxl.load_workbook(path)
sheets = wb.worksheets
for sheet in sheets:
footer_part = sheet.oddFooter.center
footer_part.text = footer
wb.save(path)
wb.close()
4.2. 改めてやってみた
このコードを実行した結果の「フッター」および「ページ設定」画面は、それぞれ以下の通り。
見ての通り、設定できることが分かります。
5. (いったん)まとめ
長くなってきたので、今回のエントリはここまでにします。
今回の内容で、「できないのでは…」と思っていたpythonによるExcelのフッターへのページ番号の設定が実はできる、ということが分かりました。
また、フッターの左右、ヘッダーについても、同様の方法出の設定が可能なのかも気になります。
それについては、次回のエントリで書きます。
ではっ!
ディスカッション
コメント一覧
まだ、コメントがありません