Home » Python » xlwingsの使い方 » xlwingsのselectionはAppとBookにあり、戻り値はRange

xlwingsのselectionはAppとBookにあり、戻り値はRange

動作検証バージョン:Windows 11 Home + Python 3.10.6(64-bit) + xlwings 0.30.9 + 64bit Excel(バージョン2306 ビルド16529.20000)

Excelそのものを操作する、Pythonの外部ライブラリ「xlwings」の場合、AppオブジェクトとBookオブジェクトにselectionプロパティが用意されています。

[スポンサードリンク]

App.selectionも、Book.selectionも、セルが選択されているときにはRangeを、セル以外のものが選択されている場合にはNoneを返します。

Book.selectionを確認しよう

拙著『VBAユーザーのためのPython超入門』でも多用しているIDLEのShellウィンドウで挙動を確認しましょう。

Excelが起動し、セルが選択されている状態で、以下のコードを実行してください。

>>> import xlwings as xw
>>>
>>> bk = xw.books.active
>>> obj = bk.selection
>>> type(obj)

以下のように出力され、Rangeオブジェクトが取得できていることを確認できます。

<class 'xlwings.main.Range'>

セルではない、たとえば画像が選択されている状態で再度

>>> obj = bk.selection
>>> type(obj)

を実行すると、

<class 'NoneType'>

と出力されます。

App.selectionも確認しよう

以下のようなコードで、App.selectionの挙動を確認できます。

>>> app = xw.apps.active
>>> obj = app.selection
>>> type(obj)

結果は、Book.selectionの場合と同じく、セルが選択されていれば

<class 'xlwings.main.Range'>


セルではないものが選択されていれば、

<class 'NoneType'>

と出力されます。

selectionプロパティの定義

selectionプロパティは、main.pyモジュールのAppクラスに、

@property
def selection(self):
    return Range(impl=self.impl.selection) if self.impl.selection else None

と定義され、Bookクラスでは、

@property
def selection(self):
    return Range(impl=self.app.selection.impl) if self.app.selection else None

と、App.selectionプロパティを呼ぶように定義されています。

また、_xlwintdows.pyモジュールのAppクラスでは、以下のように定義されています。

@property
def selection(self):
     try:
        _ = (
            self.xl.Selection.Address
        )
        return Range(xl=self.xl.Selection)
    except pywintypes.com_error:
        return None

Excel VBAのSelectionは

ちなみにExcel VBAのSelectionプロパティはApplicationとWindowに用意されており、

戻り値はいずれも「As Object」と定義されています。

最終更新日時:2023-06-18 05:03

[スポンサードリンク]

Home » Python » xlwingsの使い方 » xlwingsのselectionはAppとBookにあり、戻り値はRange

「xlwingsの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.