Home » Python » xlwingsの使い方 » Shape内の文字列操作はExcel VBAよりxlwingsのほうがシンプルに書ける

Shape内の文字列操作はExcel VBAよりxlwingsのほうがシンプルに書ける

動作検証バージョン:Windows 11 Home + Python 3.10.6(64-bit) + xlwings 0.30.9 + 64bit Excel(バージョン2307 ビルド16610.20000 クイック実行)

xlwingsのShapesコレクション・Shapeオブジェクトを使うと、Excelのワークシート上に存在する図形を操作することも可能です。

xlwingsのShapes・Shapeには、Excel VBAのShapes・Shapeの一部の機能しか実装されていませんが、図形内の文字列操作はxlwingsを使うほうが、Excel VBAよりもシンプルなコードで済みます。

xlwingsで図形の文字列を設定するサンプル

アクティブなワークシートに、文字列の入力可能な図形が1つだけ(たとえば四角形)が存在している状態で、以下のスクリプトを実行してください。

import xlwings as xw

sht = xw.sheets.active

shp = sht.shapes[0]
shp.text = 'Hello, World!'

図形に、文字列「Hello, World!」が入力されます。

Excel VBAで文字列を設定する場合

上記のスクリプトの、

shp = sht.shapes[0]
shp.text = 'Hello, World!'

の部分をExcel VBAで書くなら以下のようなコードです。

Dim shp As Shape
Set shp = sht.Shapes(1)
shp.TextFrame.Characters.Text = "Hello, World!"

xlwingsとExcel VBAの比較

図形に文字列を入力している最後のコード

shp.text = 'Hello, World!'

shp.TextFrame.Characters.Text = "Hello, World!"

を比較すると、xlwingsを使うほうがシンプルなのは一目瞭然です。

Excel VBAで図形内文字列を操作するには、拙著『理解するExcel VBA/図形操作の基本』の、「chapter 4. Shape内の文字列を操作する」で解説しているとおり、

Shapeオブジェクト
 └ TextFrameオブジェクト
    └ Charactersオブジェクト
      └ Textプロパティ

といった階層を辿る必要があります。

それに対しxlwingsでは、Shapeオブジェクトにいきなりtextプロパティが用意されているためです。

Shape.textプロパティは、_xlwindows.pyモジュールで以下のように定義されています。

@property
def text(self):
    if self.xl.TextFrame2.HasText:
        return self.xl.TextFrame2.TextRange.Text

@text.setter
def text(self, value):
    self.xl.TextFrame2.TextRange.Text = value

拙著の「chapter 6. TextFrame2を経由した文字列操作」で解説しているオブジェクトモデルを利用しています。

[スポンサードリンク]

Home » Python » xlwingsの使い方 » Shape内の文字列操作はExcel VBAよりxlwingsのほうがシンプルに書ける

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

検索


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

.