Excel自体を操作するPythonの外部ライブラリ「xlwings」にも、図形を操作するためのShapeクラスが用意されています。
ただし、書式(見た目)を操作するメソッドやプロパティは実装されていません。
そのため、図形の色を変更するなどの見た目を操作するためには、Shape.apiプロパティを経由して、Excel VBAのShapeオブジェクトを操作する必要があります。
xlwingsで図形の色を変更するサンプルスクリプト
四角形や楕円などの図形が1つ存在するワークシートがアクティブな状態で以下のスクリプトを実行すると、図形の色が緑色に変化します。
from xlwings.utils import rgb_to_int
sht = xw.sheets.active
shp = sht.shapes[0]
Shape.apiプロパティ下の
shp.api.Fill.ForeColor.RGB
の部分は、拙著『理解するExcel VBA/図形操作の基本』の「3-2. FillFormatは塗りつぶし書式を表す」で解説しているのと同じオブジェクトモデルです。
rgb_to_int()関数でタプルから24ビットカラー値を取得できる
RGB値を設定する右辺は、Excel VBAならばVBAのRGB関数を使いますが、上記のサンプルでは、xlwingsのrgb_to_int()関数を使用しています。
こちらのページ「Python×Excel xlwingsで 図形を取得, 挿入する方法」では、Pythonのシフト演算子を使った以下のような関数を自作してらっしゃいますが、
def RGB(red, green, blue):
return red + (green << 8) + (blue << 16)
現在のxlwingsには、RGB値を整数にする以下のようなrgb_to_int()関数が、utilsモジュールに定義されています。
def rgb_to_int(rgb):
return rgb[0] + (rgb[1] * 256) + (rgb[2] * 256 * 256)
先述のサンプルスクリプトでは、このrgb_to_int()関数を使うため、以下の形でインポートを行っています。
from xlwings.utils import rgb_to_int
Home » Python » xlwingsの使い方 » xlwingsで図形の色を変更する