openpyxlでエクセルファイルを編集しているんだけど、
出力後のファイルのシートを削除したり、シート名を変更されないようにしたい…。
なるほど…。ブックの保護をすることで解決します。
では今回は、「openpyxlでブックの保護を適用する方法」を
できるだけわかりやすく解説いたします。
また、「openpyxlでブックの保護を解除する方法」も
紹介いたしますので、ぜひ最後まで読んでいってください。
openpyxlでブックの保護を適用する方法
「security」を使います。まずは全コードと実行結果をお見せします。
解説は後ほど行います。
全コード
import openpyxl
from openpyxl.workbook.protection import WorkbookProtection
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
wb.security = WorkbookProtection()
wb.security.lockStructure = True
wb.save('C:/Utatane/output.xlsx')
wb.security = WorkbookProtection()
wb.security.lockStructure = True
実行結果
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポート~ブックの取得
import openpyxl
from openpyxl.workbook.protection import WorkbookProtection
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
上記コードにて、「インポート」と既存のエクセルファイルの「ブックの取得」を行っております。
1行目:「openpyxl」のインポート(エクセルの操作に必要)
2行目:「protection」のインポート(ブックの保護をするために必要)
4行目:既存のエクセルファイルのブックを取得
1行目・4行目の詳細は、「インストール方法」の記事をご参考ください。
既存のエクセルファイルを取得する以外に、エクセルファイルを新規作成する方法もあります。
下記記事をご参考ください。
ブックの保護
wb.security = WorkbookProtection()
wb.security.lockStructure = True
上記コードにて、「ブックの保護」を行っております。
【コードの解説】
取得したブックが入った変数(今回はwb)に続けて、「.security = WorkbookProtection()」を書きます。
()内には何も書かなくて大丈夫です。
改行したら、同じくブックが入った変数に続けて、「.security.lockStructure = True」と書いて完了です。
これでブックの保護が有効になりました。
実行後に出力されたファイルを、開いてみましょう。
シートの追加をするための「+」マークがグレーになっており、シートの追加ができません。
ブックの保護が有効になっている証拠です。
シートを削除するため、「Sheet1」を右クリックしてみます。
シートの削除はもちろん、挿入や名前の変更もできなくなっています。
無理やりシート名を変更するため、「Sheet1」をダブルクリックしてみます。
エラーが発生しました。どうやってもシート関連の編集はできないようですね。成功です。
ブックの保護は、「シートの追加」「シートの削除」「シート名の変更」が行えなくなるという処理です。
文字の書き換えなど、シート内の編集は行うことができますので、勘違いしないようにしましょう。
シート内を編集されないようにするには、「シートの保護」を行う必要があります。
下記記事で解説しておりますので、ご参考ください。
しかしながら、この状態では勝手にブックの保護を解除されてしまう場合があります。
エクセル内メニューの「校閲」→「ブック保護」で誰でも解除できます。
ブックの保護が解除され、下図のようにシート名を変更できるようになってしまいました。
そこで、勝手に解除されないように、パスワードを設定する方法を紹介いたします。
ブックの保護を解除されないようにパスワードを設定
import openpyxl
from openpyxl.workbook.protection import WorkbookProtection
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
wb.security = WorkbookProtection()
wb.security.lockStructure = True
wb.security.workbook_password = 'Utatane'
wb.save('C:/Utatane/output.xlsx')
前項から「8行目」が追加されただけです。
wb.security.workbook_password = 'Utatane'
【コードの解説】
取得したブックが入った変数に続けて、「.security.workbook_password」を書きます。
そして「=(イコール)」を書いたら、設定するパスワードを書いて完了です。
パスワードは「’(クォーテーション)」で囲ってください。
1~24文字までなら設定できます。
大文字と小文字が区別されますので、ご注意ください。
これで、ブックの保護を勝手に解除しようとすると、パスワードを求められるようになります。
前項同様に「校閲」→「ブック保護」で、ブックの保護を解除しようとしてみます。
上図のような画面が表示されました。
設定したパスワードを入力しないと解除できないというわけです。
パスワード入力に成功すると、下図のようにシート名の編集などができるようになります。
今回は手動でブックの保護を解除いたしましたが、
openpyxlでブックの保護を解除する方法を次項で紹介いたします。
openpyxlでブックの保護を解除する方法
import openpyxl
from openpyxl.workbook.protection import WorkbookProtection
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
wb.security = WorkbookProtection()
wb.security.lockStructure = False
wb.save('C:/Utatane/output.xlsx')
上記コードにて、ブックの保護を解除することができます。
前々項から、7行目の右辺が変わっただけです。
- wb.security.lockStructure = True:ブックの保護を適用
- wb.security.lockStructure = False:ブックの保護を解除
「False」にすると、ブックの保護を解除できます。お試しください。
シートを保護するには?
文字の書き換えなど、シート内を編集させないようにするためには、「シートを保護」をする必要があります。
シートを保護するには、下記コードを実行してください。
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
ws.protection.sheet = True
wb.save('C:/Utatane/output.xlsx')
これでシートが保護された状態になり、「文字の書き換えなどシート内の編集」ができなくなります。
詳細は下記記事で解説しておりますので、ご参考ください。
うまく動作しない場合の対処法
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlでブックの保護を適用する方法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!