LoginSignup
2
2

xlwings 逆引き

Posted at

はじめに

Python と言えば業務自動化/効率化、業務自動化/効率化といえばターゲットは Microsoft Excel、Microsoft Excel と言えば xlwings。というわけで、Python で Excel をごにょごにょしようとすると必ず出てくる xlwings。

オブジェクト構造は VBA と酷似しているので、xlwings だから…ということはほぼ何もないです。困ったら 公式のAPIリファレンス にいけばなんとかなるのですが、いちいち調べてられないというせっかちな人や、ハマりポイントを(自分のために)逆引きメモとして残しておきます。

@m5knt さんが下記の記事でまとめて下さっているのでそちらもどうぞ(記事はちょっと古くなってますが、今でもだいたい使えます)

ニーズがありそうであれば、記事育てていきますが、Qiita 内には xlwings ネタそれほどないですね。

value で取得した値が float だったりとか None だったりとか、初見殺しいっぱいあると思うのだけど。

ハマりポイント

Excel が 2 つ立ちあがってしまう

単にこれのメモを残しておきたかっただけという説。add_book=False がポイントです。これさえ書いておけば visible は True でも False でも大丈夫。

多分ですが、

アプリ非表示状態にするためには xw.App(visible=False) と書けば大丈夫と推奨している記事・ブログが多いため、思考停止してこれをコピペしてハマるのではないかと思われる。

上記フレーズを書いただけで空っぽの Excel アプリが立ち上がるので、その後に open したファイルとあわせて 2 つ立ちあがる事になってしまいます。

main.py
import xlwings as xw

app = xw.App(visible=False, add_book=False)
wb = app.books.open("spreadsheet.xlsx"))
ws = wb.sheets[0]
rg = ws.range(1, 1)
rg.value = "TEST VALUE"

下記のスレッドがそのままなのでご参考まで(見ても特に何も収穫はない)。

基本的なオブジェクト構造教えてくれ。3行で。

オブジェクトの基本階層構造は、App -> Book(s) -> Sheet(s) -> Range です。必ずこの階層構造にならってオブジェクトを生成すべし。

xw.range("A1") といったどこの Range なんだか分からなくなる書き方はしない(たいせつ)

main.py
import xlwings as xw

# app > wb > ws > rg
app = xw.App(visible=False, add_book=False)
wb = app.books.open("spreadsheet.xlsx"))
ws = wb.sheets[0]
rg = ws.range(1, 1)
rg.value = "TEST VALUE"
2
2
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
2
2