とてつもなく長いプログラムを実行したら、
数時間後にPermissonエラーが出た。泣きそう…。
Permissionエラーを回避するために、
ファイルを開いているかどうかを判定する方法は無いの?
それは萎えますね…。
ただ誰しもが経験することかと思います。
同じ失敗を繰り返さないためにも、今回は
「ファイルを開いているかどうかを判定する方法」を
できるだけわかりやすく解説いたします!
openpyxlでファイルを開いているかどうかを判定するには
例外処理を利用し、「Permission」エラーを検知することで判定できます。
まずは全コードを網羅します(解説は後ほど)
全コード
import openpyxl
try :
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
wb.save('input.xlsx')
except PermissionError :
print('ファイルが開いたままです。閉じてください。')
else :
#通常の処理
<ざっくり解説>
対象のファイルが開いたままならメッセージを表示し、開いていなければ通常の処理を行います。
(詳細な解説は後述)
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
例外処理の概要
例外処理とは、「エラーを表示させないようにする処理」のことです。
「try~except~else」が例外処理にあたるのですが、詳細は下記記事で解説しておりますのでご参考ください。
これ以降は「例外処理」がなんとなく理解できている前提で話を進めていきます。
try
「try」が今回の本題です。
この部分で、「ファイルを開いているかどうか」を判定します。
やり方は、下記コードのように「対象のファイルを開いて保存する」だけです。
try :
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
wb.save('input.xlsx')
これで対象のファイルが開いたままならメッセージを表示し、
開いていなければ通常の処理をさせることができます。
保存する必要があるの?
ファイルを開くだけでもいいんじゃない?
開くだけではダメなんです。
ファイルが開いたままの時に出る「Permission」エラーは、
ファイルを開いたときにではなく、ファイルを上書き保存しようとしたときに出ます。
ですので、「ファイルを開いて保存する」までがセットとなります。
その他「Permission」エラーの詳細は下記記事をご参考ください。
except PermissionError
except PermissionError :
print('ファイルが開いたままです。閉じてください。')
8行目には、「except PermissionError :」と記述します。
これで、「PermissionError」が発生した場合のみ「メッセージ」を表示させることができます。
9行目には、任意のメッセージを記述してください。
「print」よりも、「ダイアログメッセージ」の方がよりわかりやすいかと思います。
ダイアログメッセージを表示させる方法は、下記記事をご参考ください。
else
else :
#通常の処理
最後に「else :」と「通常させたい処理」を記述して完了です。
これで「Permission」エラーを検知して、「ファイルを開いているかどうかを判定」できます。
ファイルが「開いたままならメッセージを表示」し、
「開いていなければ通常処理」をさせることができます。
▼実行結果(ファイルが開いたままの場合)
ファイルが開いたままでも処理を継続させることができます。
下記記事をご参考ください。
最後に
openpyxlでファイルを開いているかどうかを判定する方法を解説いたしました。
ファイルを開いているかどうかを早めに判断して、さらに効率の良い自動化を目指しましょう!
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!