Officeパスワード解除と設定

投稿者: | 2022-06-25

目次

msoffcrypto

  • pip install msoffcrypto-tool
  • Excel以外のOfficeでもいける(らしい)
# -------------------------------------
# Basic Usage:
# -------------------------------------

import pandas as pd
import msoffcrypto

encrypted = open('encrypted.xlsx', 'rb')
file = msoffcrypto.OfficeFile(encrypted)

file.load_key(password='PASSWORD')

file.load_key('decrypted.xlsx', 'wb') as f:
    file.decrypt(f)

encrypted.close()

# -------------------------------------
# Basic Usage(in-memory):
# -------------------------------------

import msoffcrypto
import io
import pandas as pd

decrypted = io.BytesIO()

with open('encrypted.xlsx', 'rb') as f:
    file = msoffcrypto.OfficeFile(f)
    file.load_key(password='PASSWORD')
    file.decrypt(decrypted)

df = pd.read_excel(decrypted)
print(df)

pywin32com

  • pywin32は、Excelだけでなく、Windowsでの処理をPythonから自動化できる外部ライブラリ
  • そのため、Excelだけでなく、WordやPowerPointなどのその他のアプリケーションも操作が可能
  • そのコードはVBAに近い
# インストール
pip install pywin32
  • Mac だと使えない
# 参考URL
# https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook.open

# pywin32の機能を使ってExcel操作する
import win32com.client

# ExcelにPWを設定する
def set_excel_pw(f_p, pw_str):
    excel = win32com.client.Dispatch('Excel.Application')
    book = excel.Workbooks.Open(f_p, False, False, None, pw_str)
    book.SaveAs(f_p, 51, password)
    book.Close()
    excel.Quit()

# ExcelのPWを解除し、別名で保存
def remove_excel_pw_and_save_as(f_p_bf, f_p_af, pw_str):
    excel = win32com.client.Dispatch('Excel.Application')
    book = excel.Workbooks.Open(f_p_bf, False, False, None, pw_str)
    book.SaveAs(f_p_af, 51, '')
    book.Close()
    excel.Quit()

# ExcelのPWを解除し、上書き保存
def remove_excel_pw_and_overwrite(f_p, pw_str):
    excel = win32com.client.Dispatch('Excel.Application')
    book = excel.Workbooks.Open(f_p, False, False, None, pw_str)
    excel.DisplayAlerts = False # 上書きMSGを非表示
    book.SaveAs(f_p, 51, '')
    book.Close()
    excel.Quit()