openpyxl で行列グループ化を設定し、閲覧者に合わせて表示範囲を最適化する方法

大量のデータを掲載した Excel シートでは、「重要な見出しだけを見せ、詳細は必要に応じて展開する」設計にすると閲覧者の負担が軽減されます。openpyxl を利用すれば、行・列ごとにアウトライン(グループ化)を設定し、初期状態で折りたたむことが可能です。本記事では 行をブロック単位で非表示特定列を折りたたみ にする手順を解説いたします。


目次

動作環境

項目内容
Python3.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() を活用すると、閲覧者のニーズに合わせてシートの情報量を制御できます。
  • 初期状態で詳細行・列を畳んでおき、必要なときに展開できるため、大規模なシートでもストレスなく閲覧できます。
  • アウトライン階層を組み合わせれば、レポート全体を階層的にナビゲートでき、ユーザー体験が向上いたします。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

目次