パソコンを変えたらこのエラーが発生してとても焦りました。
結論から言うと、原因は”ExcelがPythonによって開かれたままだったため”でした。
決してパソコンやPython環境が問題ではなく、Pythonでファイルを開く、閉じるコードを追加すれば解決することがわかりました。
エラーになった背景
openpyxlというライブラリを使って、Excelファイルにある値から新規フォルダを作成し、ファイルを移動するプログラムを使っていました。
新しいパソコンにしたところ“PermissionError: [WinError 32]別のプロセスが使用中です”、というエラーが発生し、移動したいファイルがコピーはされるが移動はできない、という状況になりました。
ただし、openpyxlを使わないファイルのコピーや移動だけの処理はできていました。
解決した方法
タスクマネージャーでExcelを終了したり、OneDriveの解除といった操作は関係ありませんでした。
別のプロセスが使用中…というプロセスは、Pythonだったということが判明。
原因解明のヒントとなったのは、
該当ファイルを手動で削除しようとした際に現れた、「pythonによってファイルは開かれているため、操作を完了できません。」というメッセージです。
解決には、openとcloseを使ってファイルを開く、閉じるのコードを追加しました。
#ファイルを開き新規フォルダを作成
file=open("xlsxファイルのパス", "rb"):
#実行したい処理を書く
os.mkdir("新規フォルダのパス")
#ファイルを閉じる
file.close()
#実行したい処理(今回はファイル移動)
shutil.move("xlsxファイル","移動先のパス")
このプログラムを試す前に一度Excelを終了し、Pythonプログラムを作成している環境もshut downして再起動されることをおすすめします。
再度同じエラーが起きたら
続けて実行するとまた同じエラーになる場合があります。
ファイルがPythonによって開かれている可能性があるので、Pythonを書いている環境をshut downして再起動して、実行してみてください。
もしくは、1つのプログラムを次の2つのファイルに分けて実行する方法も試してみてください。
- エラーが起きずに処理できている部分 (対象のExcelをopenで開いてfile.close()で終了する)
- エラー発生箇所以降の部分(Pythonによって開かれているExcelを終了する必要がある箇所)。対象のExcelをopenで開いてfile.close()で終了した後、実行したい処理を書きます
①を実行し、ファイルを閉じてから②のファイルを実行してみてください。