Excelを操作するPythonの外部ライブラリ「xlwings」の、Range.merge()メソッドを使ってセルを結合できることをご紹介しました。
Excel VBAをよくご存じの方の場合、
「xlwingsのRange.merge_cellsは、Excel VBAのRange.MergeCellsのラッパーのはずだから、
Range.merge_cellsプロパティにTrueを設定することで、セル結合できるのではないか」
と考えるかもしれません。
Range.merge_cellsでセル結合できないことを確認しよう
確かにxlwingsのRange.merge_cellsは、内部でExcel VBAのRange.MergeCellsを利用していますが、Range.merge_cellsプロパティを使ってセル結合はできません。
簡単なスクリプトを実行して確認しましょう。
bk = xw.Book()
sht = bk.sheets.active
rng.merge_cells = True
上記のスクリプトを実行すると、最後の行で
AttributeError: can't set attribute 'merge_cells'
エラーが発生します。
merge_cells属性では設定ができない、と教えてくれています。
Range.merge_cellsはsetterの定義されていない取得のみのプロパティ
xlwings.main.pyモジュールのRangeクラスで、merge_cellsプロパティは以下のように定義されています。
@property
def merge_cells(self):
return self.impl.merge_cells
また、xlwings._xlwindows.pyのRangeクラスでは、以下のように定義されています。
@property
def merge_cells(self):
return self.xl.MergeCells
たしかに、Excel VBAのRange.MergeCellsプロパティを利用しているのですが、
どちらにも「@name.setter」が定義されていません。
もしも、main.pyモジュールのRangeクラスに、
@merge_cells.setter
def merge_cells(self, value):
self.impl.merge_cells = value
_xlwindows.pyモジュールのRangeクラスに、
@merge_cells.setter
def merge_cells(self, value):
self.xl.MergeCells = value
がそれぞれ定義されていれば、Range.merge_cellsプロパティにTrueを指定することでセルを結合し、Falseを指定したときにはセル結合を解除できたと思いますが、そのようには定義されていません。
xlwingsのRange.merge_cellsプロパティは、セルが結合されているかどうかを判定するためだけに使えるプロパティです。
セル結合にはRange.merege()メソッドを、セル結合の解除にはRange.unmerge()メソッドを使いましょう。
最終更新日時:2023-05-27 05:50
Home » Python » xlwingsの使い方 » xlwingsのRange.merge_cellsでセルの結合/セル結合の解除はできません