長い表をスクロールして閲覧する際、見出し行や固定列が画面から消えると内容を把握しづらくなります。openpyxl を利用すると、freeze_panes
プロパティにセル番地を指定するだけで、Excel と同様の “ウィンドウ枠の固定” を Python から簡単に設定できます。
目次
動作環境
項目 | 内容 |
---|
Python | 3.9 以上 |
ライブラリ | openpyxl (pip install openpyxl ) |
入力ファイル例 | time_tracking.xlsx |
出力ファイル例 | time_tracking_frozen.xlsx |
1. 見出し行(1~4 行目)を固定する
from openpyxl import load_workbook
wb_path = 'time_tracking.xlsx'
wb = load_workbook(wb_path)
ws = wb.active
# A5 を起点に枠固定 → 1~4 行目が常に表示
ws.freeze_panes = 'A5'
wb.save('time_tracking_frozen.xlsx')
ポイント | 説明 |
---|
freeze_panes = 'A5' | 指定セル A5 の「左上」がスクロールの基準となり、A1:A4 行が固定されます。 |
2. 先頭 4 列(A~D 列)を固定する
from openpyxl import load_workbook
wb = load_workbook('time_tracking.xlsx')
ws = wb.active
# F1 を起点に枠固定 → A~E 列が常に表示
ws.freeze_panes = 'F1'
wb.save('time_tracking_frozen.xlsx')
ポイント | 説明 |
---|
freeze_panes = 'F1' | F1 の左側が固定対象となり、A~E 列がスクロールしても見えます。 |
3. 見出し行と先頭列を同時に固定する
from openpyxl import load_workbook
wb = load_workbook('time_tracking.xlsx')
ws = wb.active
# F5 を起点に枠固定 → A~E 列と 1~4 行目が同時に固定
ws.freeze_panes = 'F5'
wb.save('time_tracking_frozen.xlsx')
ポイント | 説明 |
---|
freeze_panes = 'F5' | 起点セルより 左 と 上 の範囲が固定されるため、行と列の両方をまとめて固定できます。 |
応用アイデア
シナリオ | 設定例 | 効果 |
---|
タイトル行だけ固定 | ws.freeze_panes = 'A2' | 1 行目を常に表示し、列は自由にスクロール |
タイトル列だけ固定 | ws.freeze_panes = 'B1' | A 列を固定し、行は自由にスクロール |
ダッシュボード形式の表 | 表ヘッダー行とメニュー列を同時固定 (ws.freeze_panes = 'C3' ) | 見出し+カテゴリ列を常に表示 |
まとめ
freeze_panes
にセル番地を指定すると、そのセルの 左上 部分が固定範囲となります。
- 行だけ・列だけ・行列同時の 3 パターンを状況に応じて使い分けると、閲覧体験が向上します。
- 誤って見出しが外れた場合は、
ws.freeze_panes = None
とすると固定を解除できます。
本設定を取り入れることで、大量データを扱う Excel レポートでも可読性を保てます。レポート自動生成スクリプトにぜひ組み込んでみてください。