エクセル内に、古いデータをまとめたワークシートがあるんだけど、
たまに新しいデータと比較したいから削除はしたくない(参照や数式がバグるし…)
でも紛らわしいから非表示にしたい。
openpyxlでワークシートを非表示にする方法は無いの?
あります!
できるだけ簡単な方法をわかりやすく解説いたします!
注意点も紹介しますので、ぜひ最後まで読んでいってください。
【著者情報】
Python歴3年。
入社2年目の春に先輩が突然トンズラし、業務を半分肩代わりするハメに…。
今までの1.5倍の仕事をこなせるはずもなく、苦しむ毎日。
業務効率化を模索中にPythonと出合う。
業務とPythonの相性が良く、2倍以上の効率化を実現。現在も効率化を進行中。
openpyxlでワークシートを非表示にするには
「sheet_state」を使います。まずは実行見本をどうぞ。
実行見本
全コード
ひとまず全コードを網羅します。解説は後ほど行います。
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
ws2 = wb['Sheet2']
ws4 = wb['Sheet4']
ws2.sheet_state = 'hidden'
ws4.sheet_state = 'visible'
wb.save('output.xlsx')
ws2.sheet_state = 'hidden'
ws4.sheet_state = 'visible'
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
openpyxlの基礎解説
既存ファイルを開いて保存する方法などの操作の基本解説は、下記記事で行っております。
ご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
ワークシートの取得
ws2 = wb['Sheet2']
ws4 = wb['Sheet4']
まずは非表示や再表示したいワークシートを取得します。
今回の場合は、「Sheet2」を非表示、「Sheet4」を再表示するため、2つのワークシートを取得しています。
シート名が間違っていたり、存在しないシートを指定した場合、シートを取得することができません。
今回のように「ワークシート名」を指定して取得する以外にも、
ワークシートの取得方法はいろいろあります。
ワークシート名が不明な時のために、ワークシート番号等で取得する方法を
下記記事で解説しておりますので、ご参考ください。
ワークシートを非表示・再表示する
ws2.sheet_state = 'hidden'
ws4.sheet_state = 'visible'
[7行目]
ワークシートを非表示にするコードです。今回の場合は前項で取得した「Sheet2」を非表示にしています。
【 非表示にしたいワークシート変数.sheet_state = ‘hidden’ 】
[8行目]
こちらはワークシートを再表示にするコードです。「Sheet4」を再表示しています。
【 再表示したいワークシート変数.sheet_state = ‘visible’ 】
アクティブシートを非表示にした場合
アクティブシートを非表示にしたらどうなるのでしょうか。
アクティブシートとは、エクセルを開いた時に表示されているワークシートのことです。
下図を見てください。アクティブシートである「Sheet1」を非表示にしてみましょう。
アクティブシートがズレるのか、はたまた開かなくなるのか…。
上図のとおり、アクティブシートが「Sheet1」から「Sheet2」へ自動で変更されるようです。
関連記事として、アクティブシートを変更する方法を下記記事で解説しております。ご参考ください。
全てのシートを非表示にした場合
上図のように、シートがひとつだけあるブックを用意しました。
この「Sheet1」を再表示したらどうなるのでしょうか?
エラーが出るのか、全てのシートが見えなくなるのか…。
実行してみましょう。
エラーが出ました。
「全てのシートを非表示にできません」というような内容です。
少なくとも1つのシートを表示させておく必要があるようです。
非表示のシートを全て再表示する方法
下記コードを実行することで、非表示になっている全てのワークシートを再表示することができます。
import openpyxl
wb = openpyxl.load_workbook('input.xlsx')
for ws in wb :
if ws.sheet_state == 'hidden':
ws.sheet_state = 'visible'
wb.save('output.xlsx')
for文とif文を使って、全てのシートの表示・非表示をチェックし、非表示なら再表示するというものです。
for文の基礎解説は下記記事で行っております。ご参考ください。
if文は下記記事をご参考ください。
うまく動作しない時
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlでワークシートを非表示・再表示する方法を解説いたしました。
冒頭の悩みように、「削除はしたくないけど隠したい」という場合はよくあるかと思いますので、ご活用ください。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!