【PYTHONメモ】指定列での結合セルの特定

PYTHON

エクセルファイルで指定列での結合セルの特定方法をシェアしようと思います。

結合セルの検知

上記のエクセルファイルの結合セルの検知を行います。シート名は「Sheet-D」、結合セルは複数の列にまたがっています。結合ファイルを取得するには merged_cells.ranges を使用します。

from openpyxl import load_workbook

filename = "C:/Labo/sheetfile3.xlsx"

wb = load_workbook(filename)
sheet1 = wb['Sheet-D']

print(sheet1.merged_cells.ranges)

出力結果は下記になります。シート内のすべての結合セルの範囲が出力されます。

[<MergedCellRange A1:B3>, <MergedCellRange A7:A12>, <MergedCellRange A14:B14>, <MergedCellRange A16:A20>]

特定の列の結合セルの検知

例えばA列の結合セルの位置を知りたいという場合があります。残念ながら現在は特定の列の結合セルの場所を特定する関数は標準ではありません。その為、自作することになります。

今回、私が作った関数が以下になります。シートと結合セルを特定したい列を入力すると行数がリストで出力されます。

from openpyxl import load_workbook

def merged_cells(sheet, cell1):
    cell2 = cell1 + ":" +cell1
    listcell = []
    listcell1 = []
    for ii in sheet.merged_cells.ranges:
        num =  ''.join([i for i in str(ii) if not i.isdigit()])
        if num == cell2:
            # print(str(ii))
            a0 = str(ii).split(":")[0]
            a1 = str(ii).split(":")[1]          
            listcell1 = [int(a0.replace(cell1, "")), int(a1.replace(cell1, ""))]
            listcell.append(listcell1)
    return listcell

コードは下記のように記述します。今回は同じファイルにmerged_cellsの関数を記載していますが、別ファイルにしてもいいですよ。

from openpyxl import load_workbook

def merged_cells(sheet, cell1):
    cell2 = cell1 + ":" +cell1
    listcell = []
    listcell1 = []
    for ii in sheet.merged_cells.ranges:
        num =  ''.join([i for i in str(ii) if not i.isdigit()])
        if num == cell2:
            # print(str(ii))
            a0 = str(ii).split(":")[0]
            a1 = str(ii).split(":")[1]          
            listcell1 = [int(a0.replace(cell1, "")), int(a1.replace(cell1, ""))]
            listcell.append(listcell1)
    return listcell

filename = "C:/Labo/sheetfile3.xlsx"

wb = load_workbook(filename)
sheet1 = wb['Sheet-D']

print(sheet1.merged_cells.ranges)

出力結果は下記になります。A列で結合しているセルのみを抽出しています。A列以外結合しているセルは出力していません。 

[[7, 12], [16, 20]]

 

PYTHON
スポンサーリンク
シェアする
フォローする

コメント

タイトルとURLをコピーしました