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のヘッダーを操作する際には、以下のいずれかのプロパティを操作します。
ヘッダーの位置 | 属性 |
---|---|
左側 |
|
中央部 |
|
右側 |
|
テーブルに示された各属性に対して設定した値(文字列)が、ヘッダーに設定されます。
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. 処理対象の属性
具体的には、以下に示すプロパティを操作します。
フッターの位置 | 属性 |
---|---|
左側 |
|
中央部 |
|
右側 |
|
見ての通り、対象となる属性は、ヘッダーの「oddHeader」が「oddFooter」に変わったのみです。
3.2. コード
フッターを操作するコードは、ヘッダーを操作するコードから、アクセス/操作する属性をテーブルで示したモノに変更することで対応可能です。
それ以外に違いがなく、ココに記載するほどでもないので省略します。
4. まとめ
今回も前回、前々回に引き続き、python/openpyxlを使用してExcelを操作してみました。
操作対象は、各シートのヘッダーとフッターの設定です。
資料を作成していると、ごくまれに複数のファイルのヘッダー/フッターを一括で変更する場面に出くわします。
ファイルの数が少なければ手動で対応も可能でしょうが、多数のファイルに対応しなければならない場合もあります。
また、エクセルファイルを開いてヘッダー/フッターを編集しようとすると、ヘッダーとフッターを別々に設定することができない、という不便さがあります。
即ち、複数のシートのヘッダー/フッターが共通であれば全ての(あるいは対象となっている)シートを選択して設定すれば、一括で設定ができます。
しかし、1つでもヘッダー/フッターが共通ではないシートがあれば、この対応ができません。
シート個別の対応が必要になります。
python/openpyxlを使用した場合、個別のこれらの手間を省き、不便さの解消ができます。
今回記載した内容が、だれかの助けになれば幸いです。
ではっ!
ex.公開しています
本エントリで紹介したコードは、GitHubで公開しています。
本文中に記載したコードを変更、最適化(と思っている)しています。
本投稿と合せて参照してください。
ディスカッション
コメント一覧
まだ、コメントがありません