![見出し画像](https://assets.st-note.com/production/uploads/images/117866084/rectangle_large_type_2_674a440e5cce44032fbe27168cfe64fd.jpeg?width=1200)
openpyxl備忘録(Excel保護設定)
ブックの保護
Excelのブックを保護すると、以下ができなくなります。
ワークシートの追加・移動・削除・非表示/再表示
ワークシート名の変更
これをopenpyxlで制御します。
必要な関数はこちらです。
from openpyxl.workbook.protection import WorkbookProtection
WorkbookProtection(workbookPassword='パスワード', lockStructure=True)を指定するだけです。簡単ですね。
import openpyxl
from openpyxl.workbook.protection import WorkbookProtection
wb=openpyxl.load_workbook("Adverse Event.xlsx")
wb.security = WorkbookProtection(workbookPassword='aaa', lockStructure=True)
wb.save("Adverse Event5.xlsx")
「情報」を見ると確かに保護されています。
![](https://assets.st-note.com/img/1696279999388-bJdzmUO3R3.png?width=1200)
追加ボタンがグレーアウトで死んでいます。
![](https://assets.st-note.com/img/1696279936275-pJqoFHk7ES.png)
シート名を変えようとしたら怒られました。確かに保護されています。
![](https://assets.st-note.com/img/1696279893041-9CGWQdykmS.png)
シートの保護
必要な関数はこちらです。
from openpyxl.styles import Protection
今回は、D1以外のD列のみ入力可能とし、それ以外を保護します。
D列のみlocked=Falseとし、それ以外をprotectionします。
import openpyxl
from openpyxl.styles import Protection
wb=openpyxl.load_workbook("Adverse Event.xlsx")
ws=wb["AE"]
for rows in ws[f"D2:D{ws.max_row}"]:
for cell in rows:
cell.protection=Protection(locked=False)
ws.protection.password = 'aaa'
ws.protection.enable()
wb.save("Adverse Event5.xlsx")
C2セルを編集しようとしたら怒られました。
![](https://assets.st-note.com/img/1696364624816-AI8Der1va7.png?width=1200)
D2には入力できました。
![](https://assets.st-note.com/img/1696364739709-1BN48qbFlI.png)
想定通りの動きですね。