21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

# xlwings 簡易リファレンス

Last updated at Posted at 2018-01-23

はじめに

本家xlwingsドキュメント で十分なのと VBA との差があまり無い作りな為 VBA と Python を知っていたら資料的価値は高くない。 ただ VBA のメンテナンスで心が折れた事と Excel オジサンの如くこき使われたので、身の回りの人にもある程度把握出来るよう簡易リファレンスを残す事にした。 可能ならオジサンと立場を変わってもらえれば幸いである。

動作環境の用意

xlwings は Excel を OLE で操作するため動作には Excel が必要である、Excel を用意出来ない状況では openpyxl などを利用すると良いだろう。

xlwings を Windows 上で動作させるには xlwings pypiwin32 comtypes のモジュールが必要である、 Python のパスが通っている状態であれば次のようにすると良いだろう。 詳しくは 本家インストール説明 を参照の事。

pip install xlwings pypiwin32 comtypes

実際に Excel から Python スクリプトを呼び出すには 本家アドイン説明 を参照の事。 本家クイックスタート説明 は環境差を設定シートで指定する、複数環境で実行する際は煩雑になるのでお勧めしない。

Python からファイル選択ダイアログを表示させ呼び出し元 Excel ファイルを選択してしまうと OLE が固まってしまう 為、私はアドインもクイックスタートも使わず以下を利用している。 この python.bat 内では利用する Python の決定とモジュールの追加と実行結果表示を担っている。

Sub PythonGoing(cmd As String)
    cmd = "%COMSPEC% /C " & ThisWorkbook.Path & "\python.bat" & " " & cmd
    Dim wsh As Object
    Set wsh = CreateObject("WScript.Shell")
    wsh.Run cmd, 0, False
    Set wsh = Nothing
End Sub
  • xlwings の RunPython を使った場合はログ出力等の位置が衝突するので複数実行は考慮していないと思われる。 この様なバッチはその問題も回避できると考えている。
  • 複数実行時にはカットバッファを使用しないように注意の事。

クラス索引

クラス 内容
xlwings.App 実行環境(Excelインスタンス)
xlwings.Book ワークブック
xlwings.Sheet ワークシート
xlwings.Range 範囲
xlwings.Name 名前付き範囲
xlwings.Chart 本家チャート
xlwings.Picture 本家画像
xlwings.Shape 本家シェイプ
引数凡例 内容
... 何かしらの有効な指定を示している
文字列 例程度の文字列
数値 例程度の数値
英単語 目的が理解出来る程度の単語で実際名とは限らない

VBA機能呼び出し

api プロパティがあるクラスはネイティブの機能を呼び出すことが可能である。 これにより xlwings がサポートしていない機能も利用する事が出来ので多くの VBA を Python と xlwings で置き換える事が出来る。 実際の Excel を利用するためバグも互換である。 ただ VBA のオブジェクトをラップしているだけなら VBA で良いと思われるだろう... 黙れ!

rng1 = xw.Range('a1')
rng2 = xw.Range('a2')
rng1.api.Copy(rng2.api)

VBA で利用される xl~ 等の定数は xw.constants.~ に定義されている。

openpyxlから移行する時のヒント

使用範囲の取得

# openpyxl
import openpyxl as px
wb = px.load_book('ブック名')
rows = wb['Sheet1'].rows

# xlwings
import xlwings as xw
wb = xw.Book('ブック名')
ws = wb.sheets['Sheet1']
ur = ws.api.UsedRange.Row + ws.api.UsedRange.Rows.Count
uc = ws.api.UsedRange.Column + ws.api.UsedRange.Columns.Count
rows = ws.range((1, 1), (ur, uc)).rows
21
20
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
21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?