openpyxl を使って納品用ブックの体裁を一括調整する方法

大量のワークシートを含む Excel ブックを納品前に整える際、「シートごとの初期表示セルやズーム倍率をそろえる」「印刷設定を統一する」 といった作業を手動で行うのは意外と手間が掛かります。本記事では openpyxl を利用し、すべてのシートに対して下記の体裁を一度に設定する Python スクリプトをご紹介いたします。

調整内容具体的なプロパティ
スクロール開始位置・ズーム倍率sheet_view.selection / zoomScale
印刷範囲・タイトル行print_area / print_title_rows
ヘッダー・フッターoddHeader.center.text / oddFooter.center.text
用紙方向・用紙サイズpage_setup.orientation / page_setup.paperSize
ページ合わせfitToWidth / fitToHeight / fitToPage

目次

1. 前提環境

項目内容
Python3.10 以上
ライブラリopenpyxl (pip install openpyxl)
入力ファイル例checklist.xlsx
出力ファイル例checklist_formatted.xlsx

2. シート表示の統一(初期セル & ズーム)

from openpyxl import load_workbook

# --- 設定値 ---
focus_cell = 'B2'      # シートを開いた直後に選択されるセル
zoom_ratio = 110       # ズーム倍率 (%)

wb = load_workbook('checklist.xlsx')

for ws in wb.worksheets:
    sv = ws.sheet_view

    # 選択セルを固定
    sel = sv.selection[0]
    sel.activeCell = focus_cell
    sel.sqref = focus_cell

    # ズーム倍率を統一
    sv.zoomScale = zoom_ratio
    sv.zoomScaleNormal = zoom_ratio

wb.save('checklist_formatted.xlsx')

3. 印刷設定を一括適用

from openpyxl import load_workbook

# --- 一括設定する値 ---
print_range      = 'A1:E60'
title_rows       = '1:4'
header_center    = '&F'             # ファイル名
footer_center    = '&P / &N pages'  # ページ番号
paper_direction  = 'landscape'      # portrait / landscape
paper_kind       = 'A3'             # openpyxl.constants.PAPERSIZE
fit_width_pages  = 1
fit_height_pages = 0                # 0 = 自動

wb = load_workbook('checklist_formatted.xlsx')

for ws in wb.worksheets:
    # 印刷範囲とタイトル行
    ws.print_area        = print_range
    ws.print_title_rows  = title_rows

    # ヘッダー & フッター
    ws.oddHeader.center.text = header_center
    ws.oddFooter.center.text = footer_center

    # 用紙設定
    ps = ws.page_setup
    ps.orientation = paper_direction
    ps.paperSize   = getattr(ws, f'PAPERSIZE_{paper_kind}')
    ps.fitToWidth  = fit_width_pages
    ps.fitToHeight = fit_height_pages
    ws.sheet_properties.pageSetUpPr.fitToPage = True

wb.save('checklist_formatted.xlsx')

ポイント

コード片説明
print_area = 'A1:E60'余白を除いた実データ部分を設定します。
title_rows = '1:4'印刷時に各ページの最上部へ繰り返し表示される行範囲です。
fitToPage横幅 1 ページに収め、高さは自動 (0) にすると縦方向の改ページ数を柔軟に調整できます。

4. まとめ

  • sheet_viewpage_setup を利用すれば、閲覧時の見やすさ印刷時のレイアウト をまとめて統一できます。
  • プロパティ名のスペルミス(sheet_properties / page_setup など)に注意しつつ、一括で設定することで納品前の最終チェック時間を短縮できます。
  • 他のブックにも再利用できるよう、設定値を定数としてまとめておくと運用がスムーズです。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次