大量のデータを掲載した Excel シートでは、「重要な見出しだけを見せ、詳細は必要に応じて展開する」設計にすると閲覧者の負担が軽減されます。openpyxl を利用すれば、行・列ごとにアウトライン(グループ化)を設定し、初期状態で折りたたむことが可能です。本記事では 行をブロック単位で非表示、特定列を折りたたみ にする手順を解説いたします。
目次
動作環境
項目 | 内容 |
---|
Python | 3.10 以上 |
ライブラリ | openpyxl(pip install openpyxl ) |
入力ファイル例 | work_record.xlsx |
出力ファイル例 | work_record_grouped.xlsx |
サンプルコード
from openpyxl import load_workbook
# 1. ワークブックとアクティブシートを取得
wb_path = 'work_record.xlsx'
wb_data = load_workbook(wb_path)
ws_sheet = wb_data.active
# 2. 行をブロック単位でグループ化(初期状態で折りたたみ)
# 6~21 行、23~28 行、30~31 行を非表示に設定
for row_range in [(6, 21), (23, 28), (30, 31)]:
ws_sheet.row_dimensions.group(
*row_range,
outline_level=1,
hidden=True
)
# 3. 列 F を折りたたみ(例:詳細メモ列)
ws_sheet.column_dimensions.group(
'F',
outline_level=1,
hidden=True
)
# 4. 保存
wb_data.save('work_record_grouped.xlsx')
コード解説
ステップ | 説明 |
---|
row_dimensions.group() | (開始行, 終了行) を渡すと、その範囲が 1 グループとしてまとめられます。hidden=True で初期状態を折りたたみに設定します。 |
column_dimensions.group() | 列記号(または範囲 'F:H' など)を指定し、行と同様のパラメータで折りたたみを制御します。 |
outline_level | 階層レベルを整数で指定します。複数階層のグループ化も可能です。 |
アウトラインの操作イメージ
グループ設定 | 初期表示 | ユーザー操作 |
---|
行 6~21 を折りたたみ | シートを開くと 1~5 行目のみ表示 | 「+」をクリックすると 6~21 行が展開 |
列 F を折りたたみ | 列 F が非表示 | 「+」をクリックすると列 F が展開 |
よくある質問
質問 | 回答 |
---|
行と列を同時に複数階層で設定できますか。 | 可能です。outline_level を 1・2・3 と段階的に設定すると、Excel 側で階層的に展開できます。 |
既存のアウトラインを解除したい場合は。 | 行: ws_sheet.row_dimensions.group(start_row, end_row, hidden=False) 列: ws_sheet.column_dimensions.group(col_string, hidden=False) で解除可能です。 |
行数が変動する場合は。 | ws_sheet.max_row を利用して動的に範囲を計算すると汎用化できます。 |
まとめ
- openpyxl の
row_dimensions.group()
/ column_dimensions.group()
を活用すると、閲覧者のニーズに合わせてシートの情報量を制御できます。
- 初期状態で詳細行・列を畳んでおき、必要なときに展開できるため、大規模なシートでもストレスなく閲覧できます。
- アウトライン階層を組み合わせれば、レポート全体を階層的にナビゲートでき、ユーザー体験が向上いたします。