2016-03-21 183 views
0

私は、パスワードで保護されたExcelファイルをPythonで作成するという話題の多くを発見しました。 Openpyxlでパスワードで保護されたExcelファイルをPythonで使用

、私が使用してSheetProtectionモジュールを見つけた:

from openpyxl.worksheet import SheetProtection

しかし、問題は、私はそれを使用するかどうかはわかりませんです。それはWorkbookまたはWorksheetの属性ではありませんので、私はこれを行うことはできません。

wb = Workbook() 
ws = wb.worksheets[0] 
ws_encrypted = ws.SheetProtection() 
ws_encrypted.password = 'test' 
... 

、このような要求は、Pythonでさえ可能であれば誰もが知っていますか?ありがとう!

答えて

2

openpyxlのドキュメントを見ると、実際にはopenpyxl.worksheet.SheetProtectionクラスがあることに気付きました。

>>> wb = Workbook() 
>>> ws = wb.worksheets[0] 
>>> ws.protection 
<openpyxl.worksheet.protection.SheetProtection object at 0xM3M0RY> 

dir(ws.protection)をチェックする文字列引数で呼び出されたときに実際に保護されたフラグを設定するように見えるん方法set_passwordがある示しています。しかし、すでにワークシートオブジェクトの一部であるように思われます。

>>> ws.protection.set_password('test') 
>>> wb.save('random.xlsx') 

私はLibreOfficeでrandom.xlsxを開き、シートは実際に保護されていました。しかし、保護を無効にしてパスワードを入力しないオプションを切り替えるだけで済みますので、私は間違っているかもしれません...

+0

お返事ありがとうございます。 'protection'属性は、Excelを開くためのパスワードを必要とせず、レビューの下のシートオプションにパスワードを追加します。ワークシートのユーザー権限を変更したい場合は、「test」と入力する必要があります。 – dyao

+0

ああ、結局のところ、探していたものだと思います。とにかく、知っておいてよかったのですが、すぐにPythonを使ってExcelを書くようになります。 – icedwater

+0

私のコードで 'wb.save'の代わりに' openpyxl.writer.excel.save_virtual_workbook'を使用しました。保護を解除すると、パスワードを要求しません(ツール>保護>保護されていないシート)。私は 'save'で試してみて、実際にパスワードを尋ねます。なぜ行動が違うのですか?私は本当にあなたの質問のために 'save_virtual_workbook' – Hussain

2

openpyxlはこれまでにブックの暗号化を提供する可能性は低いです。ただし、Excelファイル(xlsx format version> = 2010)はzipアーカイブであるため、これを自分で追加することができます。openpyxlでファイルを作成し、標準ユーティリティを使用してパスワードを追加します。

+0

"すべてのExcelファイルはzipアーカイブですか?"古いExcel 97-2003形式のファイルを書き、 '.zip'に名前を変更してzipファイルを開こうとしました。サイコロはありません。 –

+0

Excel> = 2010ファイルを読んでください。古いバージョンはopenpyxlによってサポートされていないため、ドキュメントがより明確になります。あなたはそれらのためにxlrdとxlwtをします。 –

+0

洞察のおかげで@CharlieClark、私はあなたが 'openpyxl'の主な著者の一人でもあるCharlie Clarkだと思っています。誰でもブックの暗号化を追加するように提案していますが、通常はExcelで文書パスワードとして認識できるこの方法で追加されたzip-passwordですか? – icedwater

関連する問題