pythonを使用してExcelファイルの操作を勉強しています。
本日の気づき(復習)は、印刷設定に関してです。
pythonでExcelを操作するため、openpyxlというパッケージを使用しています。
何気に、印刷設定を行うのって苦痛ではないですか?
ヘッダーだったり、フッターだったり・・・。
印刷を行う属性一覧
調べてみると、印刷の設定を行う属性が沢山ありました。
主要と思われる所を以下にまとめています。
- print_area:印刷範囲
- print_title_cols:常に印刷する列
- print_title_rows:常に印刷する行
- oddHeader.center.text:ヘッダー中央部
- oddFooter.center.text:フッター中央部
- page_setup.orientation:印刷の向き(横:ORIENTATION_PORTRAIT)(縦:ORIENTATION_LANDSCAPE)
- page_setup.fitToWidth:ページ数に合わせて印刷する設定(横)1ページなら、「1」自動なら、「0」
- page_setup.fitToHeight:ページ数に合わせて印刷する設定(縦)1ページなら、「1」自動なら、「0」
- sheet_properties.pageSetUpPr.fitToPage:fitToWidth属性、fitToHeight属性を有効にする
- page_setup.paperSize:用紙サイズ
たぶん、これぐらいだと思います。
最終的なコード
from openpyxl import load_workbook
print_area = 'A1:D50'
print_title_rows = '1:5'
header_text = '&F'
footer_text = '&P / &Nページ'
wb = load_workbook('サンプル.xlsx')
for ws in wb.worksheets:
# プリントエリアを設定
ws.print_area = print_area
# 常に印刷する行を指定
ws.print_title_rows = print_title_rows
# ヘッダーを指定
ws.oddHeader.center.text = header_text
# フッターを設定
ws.oddFooter.center.text = footer_text
wps = ws.page_setup
# 印刷の向きを設定
wps.orientation = ws.ORIENTATION_LANDSCAPE
# 横を1ページ
wps.fitToWidth = 1
# 縦を自動
wps.fitToHeight = 0
# fitTo属性を有効にする
ws.sheet_properties.pageSetUpPr.fitToPage = True
# 用紙サイズを設定
wps.paperSize = ws.PAPERSIZE_A4
wb.save('サンプル_印刷設定.xlsx')
気を付けたポイントは
worksheets属性で全シートを取得して繰り返し処理をする。
ヘッダー、フッターには
ブック名を表す'&F'、ページ番号を表す'&P'、総ページ数を表す'&N'
を、それぞれ設定した。
page_setup.fitToWidth属性、page_setup.fitToHeight属性を使用した場合は
sheet_properties.pageSetUpPr.fitToPage属性を「True」にしないと有効にならない。
と言うところでしょうか。
比較的簡単に、前ページ変更できるのでお勧めです。