xlwingsのShapesコレクション・Shapeオブジェクトを使うと、Excelのワークシート上に存在する図形を操作することも可能です。
xlwingsのShapes・Shapeには、Excel VBAのShapes・Shapeの一部の機能しか実装されていませんが、図形内の文字列操作はxlwingsを使うほうが、Excel VBAよりもシンプルなコードで済みます。
xlwingsで図形の文字列を設定するサンプル
アクティブなワークシートに、文字列の入力可能な図形が1つだけ(たとえば四角形)が存在している状態で、以下のスクリプトを実行してください。
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を経由した文字列操作」で解説しているオブジェクトモデルを利用しています。
- Newer:Range.Valueで数値を取得すると表示形式によってデータ型が変化する
- Older:pywin32・win32com.clientでExcel.Worksheet.Copyの引数Afterを指定するには
Home » Python » xlwingsの使い方 » Shape内の文字列操作はExcel VBAよりxlwingsのほうがシンプルに書ける