Home » Python » xlwingsの使い方 » xlwingsのRange.merge_cellsでセルの結合/セル結合の解除はできません

xlwingsのRange.merge_cellsでセルの結合/セル結合の解除はできません

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

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プロパティを使ってセル結合はできません。
簡単なスクリプトを実行して確認しましょう。

import xlwings as xw

bk = xw.Book()
sht = bk.sheets.active

rng = sht.range('A1:C2')
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でセルの結合/セル結合の解除はできません

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

検索


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

.