OfficeをPythonで(6)
Excelのフッターにページ番号(とか)を設定してみた

どもです。

前回のエントリで、WORDのフッターにはフィールドを設定できない、というエントリを書きました。
その後、「ではExcelはどうなんだろう?」と思い、試してみました。
そんなわけで今回は、「Excelのフッターに、pythonでページ番号を設定してみた」という内容について書いてみます。

0. 開発環境

今回のエントリの内容で使用した開発環境は、以下の通りです。

開発環境
項目 python 3.10.2
ライブラリ openpyxl 3.0.9
Excel 2013

1. 手動で設定してみる

pythonで試す前に、まず手動でExcelにページ番号を設定してみます。

手動でのページ番号の設定手順は、以下の通りです。

  1. [ページレイアウト]-[ページ設定]の右下の矢印?を選択して、「ページ設定」ダイアログを表示する。





  2. 表示された「ページ設定」ダイアログ」内の「ヘッダー/フッター」タブを選択して、ヘッダーとフッターの設定画面を表示します。



  3. この画面の「フッターの編集(U)…」ボタンを押下することで、フッターの編集画面が表示されます。





  4. ページ番号を設定するフッターの場所(今回は「中央部」)にカーソルを移動させて「ページ番号の挿入」ボタンを押下すれば、ページ番号が挿入されます。



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のフッターへのページ番号の設定が実はできる、ということが分かりました。
また、フッターの左右、ヘッダーについても、同様の方法出の設定が可能なのかも気になります。
それについては、次回のエントリで書きます。

ではっ!