LoginSignup
6
9

More than 5 years have passed since last update.

Python+xlrd+msoffcrypto-tool でパスワードの掛かったエクセルファイルを読込む

Posted at

この記事について

この記事では xlrd という、 Python からエクセルファイルを読み込むライブラリを使って、パスワードの掛かったエクセルファイルを読み込む方法について紹介します。なお、パスワード自体は 既知 であるという前提です。

xlrd 単体では、パスワードの掛かったエクセルを開くことができないため、この記事では msoffcrypto-tool という、別の Python ライブラリを使ってパスワードを解除し、通常のワークブックの状態に戻してから xlrd で読込むという手順を踏みます。

環境

自分の環境は以下の通りでしたが、ヴァージョンが違っても概ね動くと思います。

  • Python 3.6.8
  • xlrd 1.2.0
  • msoffcrypto-tools 4.6.4
  • macOS Mojave 10.14.3

スニペット

# -*- coding: utf-8 -*-

import tempfile

import xlrd
import msoffcrypto


def open_workbook(workbook_file_path, password=None):
    if password is None:
        wb = xlrd.open_workbook(workbook_file_path)
    else:
        with open(workbook_file_path, 'wb') as fin,\
                tempfile.TemporaryFile() as tfp:
            encrypted = msoffcrypto.OfficeFile(fin)
            encrypted.load_key(password=password)
            encrypted.decrypt(tfp)
            tfp.seek(0)
            wb = xlrd.open_workbook(file_content=tfp.read())
    return wb

open_workbook 関数に password 引数を渡すと、 msoffcrypto-tool でパスワードを使った復号化を行い、内容をテンポラリファイルに書き込みます。そして xlrd に復号化したテンポラリファイルを渡しています。 xlrd.open_workbook 関数は通常ファイルパスの文字列を渡しますが、 file_content キーワード引数を渡すとバイト列をそのまま読み込んでくれるようです。

参考文献

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9