回答編集履歴
4
追加
test
CHANGED
@@ -183,3 +183,83 @@
|
|
183
183
|
大変参考にさせていただいた情報:
|
184
184
|
|
185
185
|
https://stackoverflow.com/questions/36122496/password-protecting-excel-file-using-python
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
-----
|
192
|
+
|
193
|
+
|
194
|
+
|
195
|
+
# 別のやり方
|
196
|
+
|
197
|
+
下記のようにwin32com.clientを使うとだいぶシンプルになります。
|
198
|
+
|
199
|
+
(ただ、簡単なデータ編集程度であればopenpyxl無しでデータ操作できますが、
|
200
|
+
|
201
|
+
もっと込み入ったことをopenpyxlでやろうとした場合、「パスワード解除して開いたデータをそのままopenpyxlに渡して加工する」ということはできないようです。
|
202
|
+
|
203
|
+
・win32com.clientでパスワードを解除して開く
|
204
|
+
|
205
|
+
・一時的に別ファイル名でパスワード無しで保存
|
206
|
+
|
207
|
+
・一時ファイルをopenpyxlで開きなおして、openpyxlを使ってデータ操作して保存。
|
208
|
+
|
209
|
+
・一時ファイルをもう一度
|
210
|
+
|
211
|
+
win32com.clientで開いて、パスワードつきで正式なファイル名で保存、
|
212
|
+
|
213
|
+
という流れにならざるを得ないかと。)
|
214
|
+
|
215
|
+
```
|
216
|
+
|
217
|
+
# 事前に pip install pywin32 が必要
|
218
|
+
|
219
|
+
import win32com.client
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
def sub():
|
224
|
+
|
225
|
+
# フルパス必須
|
226
|
+
|
227
|
+
xlpath = r"C:\Docs\test.xlsx"
|
228
|
+
|
229
|
+
password = 'abcd'
|
230
|
+
|
231
|
+
XL_OPENXML_WORKBOOK = 51
|
232
|
+
|
233
|
+
xlApp = win32com.client.Dispatch("Excel.Application")
|
234
|
+
|
235
|
+
# 確認ダイアログ抑止
|
236
|
+
|
237
|
+
xlApp.DisplayAlerts = False
|
238
|
+
|
239
|
+
# パスワードを解除して開く (なお、読み取りパスワードが設定されていなくてもエラーにならない模様)
|
240
|
+
|
241
|
+
wb = xlApp.Workbooks.Open(xlpath, False, False, None, password)
|
242
|
+
|
243
|
+
# データ編集
|
244
|
+
|
245
|
+
sheet = wb.Worksheets(1)
|
246
|
+
|
247
|
+
sheet.Activate()
|
248
|
+
|
249
|
+
sheet.Range("A4").Value = "1"
|
250
|
+
|
251
|
+
|
252
|
+
|
253
|
+
# パスワード付きで保存する。
|
254
|
+
|
255
|
+
wb.SaveAs(xlpath, FileFormat=XL_OPENXML_WORKBOOK, Password=password)
|
256
|
+
|
257
|
+
wb.Close()
|
258
|
+
|
259
|
+
xlApp.DisplayAlerts = True
|
260
|
+
|
261
|
+
|
262
|
+
|
263
|
+
|
264
|
+
|
265
|
+
```
|
3
test
CHANGED
@@ -180,6 +180,6 @@
|
|
180
180
|
|
181
181
|
|
182
182
|
|
183
|
-
|
183
|
+
大変参考にさせていただいた情報:
|
184
184
|
|
185
185
|
https://stackoverflow.com/questions/36122496/password-protecting-excel-file-using-python
|
2
test
CHANGED
@@ -160,6 +160,8 @@
|
|
160
160
|
|
161
161
|
sheet["B2"].value = 2
|
162
162
|
|
163
|
+
# いったんパス無しで保存。
|
164
|
+
|
163
165
|
book.save("test.xlsx")
|
164
166
|
|
165
167
|
# パスワード付きで保存する。 フルパス指定しないとエラー。
|
1
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
・読み取りパスワードが設定されていないときは例外処理でトラップしそのまま開く
|
28
28
|
|
29
|
-
・**パスワード付き
|
29
|
+
・**パスワード付きエクセルとしてVBScriptで脳筋で保存**
|
30
30
|
|
31
31
|
|
32
32
|
|
@@ -124,11 +124,11 @@
|
|
124
124
|
|
125
125
|
msfile = msoffcrypto.OfficeFile(fin)
|
126
126
|
|
127
|
-
# パスワードを指定
|
127
|
+
# パスワードを指定
|
128
128
|
|
129
129
|
msfile.load_key(password="abcd")
|
130
130
|
|
131
|
-
# 復号ファイルを一時保存
|
131
|
+
# 復号ファイルを一時ファイル名で保存
|
132
132
|
|
133
133
|
with open("__temp.xlsx","wb") as f:
|
134
134
|
|