xlwings はPythonからExcelを操作できるフリーライセンスのライブラリです。
xlwingsを使うと、Excelで開いているブックを判別したり、名前を指定してファイルを開くなど、ブックとの接続を簡単に実装できて便利です。
- アクティブなブック
- 開かれているブックから名前を指定して接続
- 新規のブックを作成、編集
- ファイル名を指定して開く(+読み取り専用)
- パスワード付きファイルをPythonから開く
今回はxlwingsを使ってPythonからExcelブックを開く方法を一覧でまとめています。後で見返すブックマーク用としてご活用ください。
実行環境
$ python --version
Python 3.9.4
$ pip freeze
xlwings==0.20.5
アクティブなブックに接続
以下のように、開いているExcelブックのオブジェクトBookを取得するには、xlwings.booksメンバのactiveを参照します。
Excelが起動していないと、active
を取得する対象(App)がNone
となるので1行目でエラーとなります。
wb = xw.books.active
sht = wb.sheets.active
print(sht.range('A1').value)
# hoge
開かれているブックから名前を指定して接続
画像のように、複数のブックが開かれているときに、特定のブックに接続しBookを取得するには、books['ブック名']
とします。
指定したブック名が見つからないときにはKeyError
となります。
wb = xw.books['hoge_zoo.xlsx']
sht = wb.sheets[0]
print(sht.range('A1').value)
# zoo
新規のブックを作成、編集
新規のブックを作成し、そこにデータを更新していく場合はbooks.add()
を呼びます。戻り値が Book オブジェクトなので、これを使って Sheet を取得します。
wb = xw.books.add()
sht = wb.sheets[0]
sht.range('A1').value = 'foo'
print(sht.range('A1').value)
# 'foo'
ファイル名を指定して開く
既存のExcelファイルを開くこともできます。
ファイルパス(ファイル名)を指定してブックを開くにはbooks.open()
を用います。
ファイルパスは相対パス、絶対パスのどちらでも問題ありません。
wb = xw.books.open('./data/hoge.xlsx')
sht = wb.sheets[0]
sht.range('A1').value = 'updated!'
print(sht.range('A1').value)
# updated!
読み取り専用で開く
読み取り専用としてブックを開くには open()
の引数 read_only=True
を渡します。
Excelの画面を見ると、読み取り専用で開いているのが確認できると思います。
最後に Book.save()
すると、エラーが出ないので一見すると更新されているようにみえますが、データは更新されません。
wb = xw.books.open('./data/hoge.xlsx', read_only=True)
sht = wb.sheets[0]
sht.range('A1').value = 'foobar'
wb.save()
# エラーにはならないが、値は更新されない
パスワード付きファイルをPythonから開く
閲覧パスワード付きの暗号化Excelファイルも xlwings経由で開けます。
open()
の引数password
に文字列でそのまま渡します。
p = 'passw0rd'
wb = xw.books.open('./data/hoge_password.xlsx', password=p)
sht = wb.sheets[0]
print(sht.range('A1').value)
# protected
ブックの閉じ方
接続しているBookを閉じるにはBook.close()
を呼びます。
保存されていなくても、確認ダイアログやエラーは出ません。保存されていない内容は消去されるので注意が必要です。
wb = xw.books.add()
sht = wb.sheets[0]
import time
time.sleep(2)
wb.close()