openpyxlでエクセルファイルを編集しているんだけど、
書き換えできないように、読み取り専用で保存したい…。
なるほど…。
では今回は、「openpyxlでエクセルを読み取り専用で保存する方法」を
できるだけわかりやすく解説いたします。
「openpyxlで読み取り専用を解除する方法」も紹介いたしますので、
ぜひ最後まで読んでいってください。
openpyxlでエクセルを読み取り専用で保存する方法
「chmod」を使います。まずは全コードと実行結果をお見せします。
解説は後ほど行います。
全コード
import openpyxl
import os
os.chmod('C:/Utatane/input.xlsx', 0o444)
os.chmod('C:/Utatane/input.xlsx', 0o444)
実行結果
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、既存ファイルを開いて保存する方法など、基本解説も行っておりますのでご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポート
まずはインポートについての解説です。
import openpyxl
import os
エクセルファイルを読み取り専用で保存するには、「os」のインポート(コード2行目)が必要です。
今回のように、読み取り専用で保存するだけなら「openpyxl」のインポート(1行目)は必要ありません。
しかしながら、エクセルファイルに何らかの編集を施すことがほとんどかと思いますので、その場合は「openpyxl」のインポートが必要です。
今回はインポートし忘れとエラーを防ぐため、「openpyxl」もインポートしています。
エクセルファイルを読み取り専用で保存
os.chmod('C:/Utatane/input.xlsx', 0o444)
上記一文にて、エクセルファイルを読み取り専用で保存しています。
【コード解説】
「os.chmod()」を書いたら、()内に「対象のフォルダパス/ファイル名」,「0o444」を書きます。
【フォルダパス】とは
ファイルの在りかを示す「住所」のようなものです。
フォルダパスの確認方法ですが、ファイルを保存したいフォルダを開き、
「アドレスバー(下図の青色部分)」をクリックしてください。これがフォルダパスです。
フォルダパスにファイル名を追加すれば、保存先の指定が完成します。
「’C:/Utatane/input.xlsx’」
パスは「’(クォーテーション)」で囲ってください。
また、コピペで「C:\\」や「C:¥」になる場合は、「/」に書き直しましょう。
「0o444」がエクセルファイルを読み取り専用で保存するキーワードだと思ってください。
(ゼロ、小文字のオー、444です)
コードの詳細がわかったところで、プログラムを実行してみましょう。
実行後、対象のファイルを右クリックし、「プロパティ」を見てみます。
読み取り専用にチェックが入っているのがわかります。
今度は、実際にファイルを開き、編集して保存してみます。
エラーメッセージが出ました。
キチンと読み取り専用で保存されています。
openpyxlでの編集はどうでしょうか?
下記コードを実行してみます。
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
ws['A1'].value = 1
wb.save('C:/Utatane/input.xlsx')
「Sheet1」の「A1」セルに「1」を追加する簡単なコードです。
実行してみましょう。
「Permissionエラー」が出ました。
対象のファイルを開いている時に出やすいエラーですが、「保存できないよ」と言ってきているので、読み取り専用が成功しているといえます。
では次に、この読み取り専用を解除する方法を紹介いたします。
読み取り専用を解除する方法
import openpyxl
import os
os.chmod('C:/Utatane/input.xlsx', 0o666)
上記コードにて、読み取り専用を解除することができます。
前項のコードから変わったのは、4行目の最後だけです。
「0o666」は書き込み可能に設定、つまり読み取り専用を解除するためのキーワードです。
- 0o444:読み取り専用
- 0o666:書き込み可能(読み取り専用を解除)
これでこのエクセルファイルの読み取り専用は解除され、編集が可能になります。
うまく動作しない場合の対処法
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
既に読み取り専用になっている可能性もありますので、確認してみてください。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlでエクセルファイルを読み取り専用で保存する方法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!