OfficeをPythonで(3)
Excelドキュメントの場合 其の3
(ヘッダーとフッター)

どもです。

前回前々回とPythonとopenpyxlを使ってMicrosoft OfficeのExcelをいじる方法を紹介しました。
そして今回も、引き続きPythonとopenpyxlを使ってMicrosoft OfficeのExcelをいじってみます。

なお、今回の「いじってみる」内容は以下の通りです。

  • ヘッダーに文字列を追加する
  • フッターに文字列を追加する

0. 開発環境

引き続き、以下の環境で操作を行います。

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

1. ヘッダーに文字列を設定する

まず、ヘッダーへの文字列の設定です。

Excelに手動でヘッダを設定する場合には、リボンの「挿入」の「ヘッダーとフッター」を選択します。



すると画面が「ページレイアウト」設定に切り換わり、ヘッダの編集欄にフォーカスがセットされた状態になります。



また、リボンの「ページレイアウト」タブの「ページ設定」を選択して表示される「ページ設定」画面からでも、設定が可能です。





なお、この画面上の「ヘッダーの編集」を選択すると「ヘッダー」ダイアログが表示されます。



このダイアログでは、「左側」「中央部」「右側」の3つの入力欄が用意されています。
Excelのヘッダは、この3か所に対して別々に設定することができます。

これは、python/openpyxlを使用した場合でも同じです。

2.1. 処理対象の属性

Excelのヘッダーを操作する際には、以下のいずれかのプロパティを操作します。

ヘッダーの位置 属性
左側
worksheet.oddHeader.left.text
中央部
worksheet.oddHeader.center.text
右側
worksheet.oddHeader.right.text

テーブルに示された各属性に対して設定した値(文字列)が、ヘッダーに設定されます。

2.2. コード

例として、テーブルに示された「右側」に対応する属性に値を設定して、ヘッダーに文字列を設定するコードを示します。

def SetPageFooterRight(sheet:worksheet, headers:list) -> None:
	"""Set header of right.

	Setup right header of all sheets in a excel file.

	Args:
		sheet(worksheet): Worksheet object to set header.
		headetrs(list): Collection of strings to set into header.
						One item is one line in header.
						When output, all items are joined by change line code.
	"""
	header_text = ''
	is_top = True
	for header_item in headers:
		if False == is_top:
			header_text += '\n'
		header_text += header_item
		is_top = False

	sheet.oddHeader.right.text = header_text

途中のforループでは、ヘッダに設定する文字列が複数行になる場合、list形式で渡された各行の内容を改行コード(\n)で結合しています。
これにより、複数行のヘッダにも対応が可能となります。

結合した文字列を「oddHeader.right」の「text」属性に設定します。
これにより、ヘッダに文字列が設定されます。

ヘッダの「左側」あるいは「中央部」に文字列を設定する場合には、「oddHeader」を先述に示したプロパティに置き換えることで、対応ができます。

なお今回は、ブックを開く、閉じる、シートのオブジェクトを取得する処理は、前回と共通なので、省略しています。

3. フッターに文字列を設定する

次に、フッターへの文字列の設定です。

とは言っても、フッターについては新規に記載することがありません。
操作する属性が、フッターに変更になるのみです。

3.1. 処理対象の属性

具体的には、以下に示すプロパティを操作します。

フッターの位置 属性
左側
worksheet.oddFooter.left.text
中央部
worksheet.oddFooter.center.text
右側
worksheet.oddFooter.right.text

見ての通り、対象となる属性は、ヘッダーの「oddHeader」が「oddFooter」に変わったのみです。

3.2. コード

フッターを操作するコードは、ヘッダーを操作するコードから、アクセス/操作する属性をテーブルで示したモノに変更することで対応可能です。
それ以外に違いがなく、ココに記載するほどでもないので省略します。

4. まとめ

今回も前回前々回に引き続き、python/openpyxlを使用してExcelを操作してみました。
操作対象は、各シートのヘッダーとフッターの設定です。
資料を作成していると、ごくまれに複数のファイルのヘッダー/フッターを一括で変更する場面に出くわします。
ファイルの数が少なければ手動で対応も可能でしょうが、多数のファイルに対応しなければならない場合もあります。

また、エクセルファイルを開いてヘッダー/フッターを編集しようとすると、ヘッダーとフッターを別々に設定することができない、という不便さがあります。
即ち、複数のシートのヘッダー/フッターが共通であれば全ての(あるいは対象となっている)シートを選択して設定すれば、一括で設定ができます。
しかし、1つでもヘッダー/フッターが共通ではないシートがあれば、この対応ができません。
シート個別の対応が必要になります。

python/openpyxlを使用した場合、個別のこれらの手間を省き、不便さの解消ができます。

今回記載した内容が、だれかの助けになれば幸いです。

ではっ!

ex.公開しています

本エントリで紹介したコードは、GitHubで公開しています。
本文中に記載したコードを変更、最適化(と思っている)しています。
本投稿と合せて参照してください。