【openpyxlでシート・行・列をグループ化】解除する方法も解説

スポンサードリンク
Python
過去の自分
過去の自分

openpyxlでエクセルファイルを編集しているんだけど、
最後にシートをグループ化する必要がある…。
openpyxlでグループ化をする方法は無いの?

今の自分
今の自分

なるほど…。
では今回は、「openpyxlでシートをグループ化する方法」
できるだけわかりやすく解説いたします。
また、「グループ化解除の方法」「行や列をグループ化する方法」
も紹介いたしますので、ぜひ最後まで読んでいってください。

著者情報
スポンサードリンク

openpyxlでシートをグループ化する方法

「sheet_view」「tabSelected」を使います。まずは全コードと実行結果をお見せします。
解説は後ほど行います。

全コード

import openpyxl

wb = openpyxl.load_workbook('input.xlsx')
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
ws3 = wb['Sheet3']

ws1.sheet_view.tabSelected = True
ws2.sheet_view.tabSelected = True
ws3.sheet_view.tabSelected = True

wb.save('output.xlsx')
ws1.sheet_view.tabSelected = True
ws2.sheet_view.tabSelected = True
ws3.sheet_view.tabSelected = True

実行結果

openpyxlでシートをグループ化した実行結果

事前準備

  • openpyxlのインストール

既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。

openpyxlのインストール方法

openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。

pip install openpyxl

※openpyxlを使用したことがある場合は、このインストール作業は不要です。

インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。

解説

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

シートの取得

まずはグループ化するシートを取得します。
今回は、「Sheet1」~「Sheet3」までグループ化するため、3つのシートを取得しています。

ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
ws3 = wb['Sheet3']

シートの取得方法の詳細は下記記事をご参考ください。

グループ化

前項で取得したシートをグループ化します。

ws1.sheet_view.tabSelected = True
ws2.sheet_view.tabSelected = True
ws3.sheet_view.tabSelected = True

取得したシートが入った変数に続けて「.sheet_view.tabSelected = True」と書きます。
これをグループ化したいシートの分だけ行えば完了です。

シートをグループ化した実行結果

「Sheet1」~「Sheet3」までがグループ化されていることがわかります。

openpyxlでシートのグループ化を解除する方法

今度はシートのグループ化を解除する方法を見ていきましょう。
前項でグループ化した「Sheet1」~「Sheet3」を解除してみます。

import openpyxl

wb = openpyxl.load_workbook('input.xlsx')
ws1 = wb['Sheet1']
ws2 = wb['Sheet2']
ws3 = wb['Sheet3']

ws1.sheet_view.tabSelected = False
ws2.sheet_view.tabSelected = False
ws3.sheet_view.tabSelected = False

wb.save('output.xlsx')

コードは簡単です。
前項で「True」だったところを「False」にしただけです。
これで「Sheet1」~「Sheet3」のグループ化が解除できます。

シートのグループ化を解除した実行結果
スポンサードリンク

openpyxlで行・列をグループ化する方法・解除する方法

今度は行や列をグループ化する方法と解除する方法です。
まずは行をグループ化して折り畳む方法を見ていきましょう。

行をグループ化

import openpyxl

wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']

ws.row_dimensions.group(2, 5, hidden = True)

wb.save('output.xlsx')
行をグループ化した時の実行結果

コードの6行目に注目してください。

ws.row_dimensions.group(2, 5, hidden = True)

ワークシートが入った変数に続けて「.row_dimensions.group()」を記述します。
()内にはグループ化する行を指定します。
上記コードは、2行目~5行目までをグループ化する例です。

「hidden = True」を記述すると、グループ化した行が折り畳まれた状態になります。

hidden=Trueにした場合の例

「hidden」を「False」にすると、グループ化した行が表示されたままになります。

hidden=Falseにした場合の例

では次に、列をグループ化する方法を見ていきましょう。

列をグループ化

列をグループ化するには、前項のコードの6行目を下記のように変えてください。

ws.column_dimensions.group('B', 'E', hidden=True)
列をグループ化した時の実行結果

グループ化する列の指定は、アルファベットで行ってください。
「hidden」の性質は行をグループ化する時と同じです。

行のグループ化を解除

行のグループ化を解除するには、下記コードを実行してください。

import openpyxl

wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']

for row in range(2, 6):
    ws.row_dimensions[row].outlineLevel = 0
    ws.row_dimensions[row].hidden = False

wb.save('output.xlsx')

コードの6~8行目で行のグループ化を解除することができます。
7行目でグループ化を解除し、8行目で非表示を解除(再表示)しています。
それをfor文でエクセルの2~6行目に適用しています。

for文については下記記事をご参考ください。

列のグループ化を解除

列のグループ化解除は、行の時より少し複雑です。
※数字を列のアルファベットに変換するため

import openpyxl

wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']

for col in range(2, 5):
    col_letter = openpyxl.utils.get_column_letter(col)
    ws.column_dimensions[col_letter].outlineLevel = 0
    ws.column_dimensions[col_letter].hidden = False

wb.save('output.xlsx')

行のグループ化解除を行った時より、7行目が追加されています。
これは変数「col」に入った数字を列のアルファベットに変換する記述です。
指定が2~5なので、B列~E列のグループ化が解除されます。

スポンサードリンク

うまく動作しない場合の対処法

エラーが出る

No such file or directory: ○○

これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。

詳しい解説は、下記記事をご参考ください。

Permission denied: ○○

操作しようとしているファイルにアクセスできないというエラーです。
ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。

詳しい解説は、下記記事をご参考ください。

Worksheet ○○ does not exist

「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。

詳しい解説は、下記記事をご参考ください。

○○ is not defined

今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。

詳しい解説は、下記記事をご参考ください。

list index out of range

規定を超える部分を操作しようとした時に出るエラーです。
今回の場合では、実際にないSheet3(シート番号2)などを指定した場合にも起こります。
ファイルとコードを再確認しましょう。

その他のエラー

その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。

スポンサードリンク

最後に

openpyxlでシートや行・列をグループ化する方法を解説いたしました。

当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

挫折せずにPythonを独学で学習する方法は特におすすめです。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました