PythonでExcelファイルを操作できるライブラリopenpyxlは非常に便利ですが、「大量のデータを扱うExcelファイルで、ヘッダー行を常に表示させたい…」と感じたことはありませんか?
Excelで手動操作する際の「ウィンドウ枠の固定」を、Pythonコードで実現したい、という方は多いはずです。
この記事では、openpyxlのSheetViewクラスを使って、Excelのウィンドウ枠を固定する方法を、初心者の方にも分かりやすく、具体的なコード例を交えて解説します。
この記事を読み終える頃には、あなたはopenpyxlでウィンドウ枠の固定を自由自在に操れるようになっています。
はじめに:openpyxlのSheetViewとは?
まずはSheetViewが何者なのかを理解しましょう。
Excelの「表示」設定をPythonで操作する
SheetViewを一言で表すと、Excelシートの「表示」に関する設定を管理するクラスです。
Excelのメニューでいう「表示」タブの中にある、ウィンドウ枠の固定、枠線の表示/非表示、ズーム倍率といった設定を、Pythonコードから操作するために使います。各ワークシートはそれぞれ独自のSheetViewを持っており、worksheet.sheet_viewという形でアクセスできます。
この記事を読めば「ウィンドウ枠の固定」が自由自在に
SheetViewには様々な設定項目がありますが、最もよく使われるのがウィンドウ枠を固定するためのfreeze_panesプロパティです。
この記事では、このfreeze_panesの使い方に焦点を当てて、実践的なテクニックを紹介していきます。
SheetViewの基本:ウィンドウ枠を固定する freeze_panes
ウィンドウ枠の固定は、sheet.sheet_view.freeze_panesに特定のセル番地を文字列で設定するだけで完了します。
freeze_panes プロパティの仕組み
freeze_panesプロパティには、固定したい境界線のすぐ右下のセルの番地を指定します。
例えば、セルB2を指定した場合、B2の左側(A列)と上側(1行目)が固定されます。このルールさえ覚えてしまえば、とても簡単です。
基本的な使い方:サンプルコード
まずは、openpyxlをインストールしていない場合は、以下のコマンドでインストールしてください(Bash)。
pip install openpyxl
それでは、A1セルを基準にウィンドウ枠を固定する(1行目とA列を固定する)簡単なサンプルコードを見てみましょう。B2を指定するのがポイントです。
import openpyxl
# 新しいワークブックを作成
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = "Freeze Panes Sample"
# サンプルデータを書き込む
for i in range(1, 31):
for j in range(1, 21):
sheet.cell(row=i, column=j, value=f'({i}, {j})')
# ウィンドウ枠を固定する (B2を指定すると、1行目とA列が固定される)
sheet.sheet_view.freeze_panes = 'B2'
# ファイルを保存
wb.save("freeze_panes_example.xlsx")
print("ウィンドウ枠を固定したExcelファイルを保存しました。")このコードを実行すると、1行目とA列をスクロールしても常に表示されるExcelファイルが生成されます。
実践!ウィンドウ枠の固定パターン別コード集
ここからは、よくあるケース別にウィンドウ枠を固定する方法をコードで見ていきましょう。
パターン1:1行目(ヘッダー行)を固定する
ヘッダー行として使うことが多い1行目だけを固定したい場合は、A2 を指定します。
これにより、2行目の上、つまり1行目が固定され、列は固定されません。
import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
# (中略) データの書き込みなど
# 1行目を固定する
sheet.sheet_view.freeze_panes = 'A2'
wb.save("freeze_row_1.xlsx")パターン2:A列(ID列など)を固定する
行は固定せず、A列だけを固定したいケースです。この場合は、B1 を指定します。
これにより、B列の左、つまりA列が固定され、行は固定されません。
import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
# (中略) データの書き込みなど
# A列を固定する
sheet.sheet_view.freeze_panes = 'B1'
wb.save("freeze_column_A.xlsx")パターン3:特定のセルを基準に行と列を同時に固定する
例えば、3行目までとB列までを同時に固定したい場合は、境界線の右下にあるセル C4 を指定します。
import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
# (中略) データの書き込みなど
# 3行目までとB列までを固定する
sheet.sheet_view.freeze_panes = 'C4'
wb.save("freeze_row_and_column.xlsx")ウィンドウ枠の固定を解除する方法
設定したウィンドウ枠の固定を解除したい場合は、freeze_panesプロパティにNoneを設定します。
# ウィンドウ枠の固定を解除
sheet.sheet_view.freeze_panes = Noneとてもシンプルですね。
【応用】SheetViewでできるその他の表示設定
SheetViewにはfreeze_panes以外にも便利なプロパティがあります。ここでは2つ紹介します。
show_grid_lines:枠線の表示・非表示を切り替える
Excelシートのセルごとにある灰色の枠線(グリッド線)の表示・非表示を切り替えることができます。Trueで表示(デフォルト)、Falseで非表示になります。
# 枠線を非表示にする
sheet.sheet_view.show_grid_lines = Falseレポートなど、見た目をスッキリさせたい場合に便利です。
zoom_scale:シートの表示倍率を変更する
シートの表示倍率をパーセンテージで指定できます。デフォルトは100です。
# 表示倍率を75%に設定する
sheet.sheet_view.zoom_scale = 75まとめ
今回は、openpyxlのSheetViewクラス、特にfreeze_panesプロパティを使ったウィンドウ枠の固定方法について解説しました。
SheetViewはExcelの表示設定を管理するクラス- ウィンドウ枠の固定は
sheet.sheet_view.freeze_panesで設定 - 固定したい境界線の「右下のセル」を指定するのがポイント
'A2'で1行目、'B1'でA列を固定できる- 解除は
Noneを設定するだけ
openpyxlを使ったExcel業務の自動化において、ウィンドウ枠の固定は、生成されるファイルの使いやすさを大きく向上させる重要なテクニックです。ぜひマスターして、あなたのPythonスクリプトをさらにパワーアップさせてください。


コメント