回答編集履歴
4
追加
answer
CHANGED
@@ -90,4 +90,44 @@
|
|
90
90
|
```
|
91
91
|
|
92
92
|
大変参考にさせていただいた情報:
|
93
|
-
https://stackoverflow.com/questions/36122496/password-protecting-excel-file-using-python
|
93
|
+
https://stackoverflow.com/questions/36122496/password-protecting-excel-file-using-python
|
94
|
+
|
95
|
+
|
96
|
+
-----
|
97
|
+
|
98
|
+
# 別のやり方
|
99
|
+
下記のようにwin32com.clientを使うとだいぶシンプルになります。
|
100
|
+
(ただ、簡単なデータ編集程度であればopenpyxl無しでデータ操作できますが、
|
101
|
+
もっと込み入ったことをopenpyxlでやろうとした場合、「パスワード解除して開いたデータをそのままopenpyxlに渡して加工する」ということはできないようです。
|
102
|
+
・win32com.clientでパスワードを解除して開く
|
103
|
+
・一時的に別ファイル名でパスワード無しで保存
|
104
|
+
・一時ファイルをopenpyxlで開きなおして、openpyxlを使ってデータ操作して保存。
|
105
|
+
・一時ファイルをもう一度
|
106
|
+
win32com.clientで開いて、パスワードつきで正式なファイル名で保存、
|
107
|
+
という流れにならざるを得ないかと。)
|
108
|
+
```
|
109
|
+
# 事前に pip install pywin32 が必要
|
110
|
+
import win32com.client
|
111
|
+
|
112
|
+
def sub():
|
113
|
+
# フルパス必須
|
114
|
+
xlpath = r"C:\Docs\test.xlsx"
|
115
|
+
password = 'abcd'
|
116
|
+
XL_OPENXML_WORKBOOK = 51
|
117
|
+
xlApp = win32com.client.Dispatch("Excel.Application")
|
118
|
+
# 確認ダイアログ抑止
|
119
|
+
xlApp.DisplayAlerts = False
|
120
|
+
# パスワードを解除して開く (なお、読み取りパスワードが設定されていなくてもエラーにならない模様)
|
121
|
+
wb = xlApp.Workbooks.Open(xlpath, False, False, None, password)
|
122
|
+
# データ編集
|
123
|
+
sheet = wb.Worksheets(1)
|
124
|
+
sheet.Activate()
|
125
|
+
sheet.Range("A4").Value = "1"
|
126
|
+
|
127
|
+
# パスワード付きで保存する。
|
128
|
+
wb.SaveAs(xlpath, FileFormat=XL_OPENXML_WORKBOOK, Password=password)
|
129
|
+
wb.Close()
|
130
|
+
xlApp.DisplayAlerts = True
|
131
|
+
|
132
|
+
|
133
|
+
```
|
3
answer
CHANGED
@@ -89,5 +89,5 @@
|
|
89
89
|
print("終了しました。")
|
90
90
|
```
|
91
91
|
|
92
|
-
|
92
|
+
大変参考にさせていただいた情報:
|
93
93
|
https://stackoverflow.com/questions/36122496/password-protecting-excel-file-using-python
|
2
answer
CHANGED
@@ -79,6 +79,7 @@
|
|
79
79
|
|
80
80
|
sheet = book.active
|
81
81
|
sheet["B2"].value = 2
|
82
|
+
# いったんパス無しで保存。
|
82
83
|
book.save("test.xlsx")
|
83
84
|
# パスワード付きで保存する。 フルパス指定しないとエラー。
|
84
85
|
set_password(r"C:\Docs\test.xlsx", "abcd")
|
1
answer
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
・msoffcrypto-toolは読み取りパスワードの解除だけに使用
|
13
13
|
・パスワードが解除されたファイルは一時ファイルで保存
|
14
14
|
・読み取りパスワードが設定されていないときは例外処理でトラップしそのまま開く
|
15
|
-
・**パスワード付き
|
15
|
+
・**パスワード付きエクセルとしてVBScriptで脳筋で保存**
|
16
16
|
|
17
17
|
という戦略を提案します。
|
18
18
|
|
@@ -61,9 +61,9 @@
|
|
61
61
|
try:
|
62
62
|
with open("test.xlsx","rb") as fin:
|
63
63
|
msfile = msoffcrypto.OfficeFile(fin)
|
64
|
-
|
64
|
+
# パスワードを指定
|
65
65
|
msfile.load_key(password="abcd")
|
66
|
-
# 復号ファイルを一時保存
|
66
|
+
# 復号ファイルを一時ファイル名で保存
|
67
67
|
with open("__temp.xlsx","wb") as f:
|
68
68
|
msfile.decrypt(f)
|
69
69
|
# 一時ファイルを開く
|