OpenPyXLでExcelを検索してセル番地を返すPythonコード


概要

PythonのOpenPyXLを使ってExcelをキーワード検索し、一致したセル番地(A7とか)を返すコードです。
これ単体で使うわけではなく、他のコードに組み込んで何か処理をしたい時に使う想定です。
検索結果はリスト型で返されます。

コード
"""
Excelの行列から特定の文字列を検索し、セル番地を返す
"""

import openpyxl

# 特定の列を検索
def search_column(column, keyword):
    result = []
    for cell in column:
        # セルのデータを文字列に変換
        try:
            value = str(cell.value)
        # 文字列に変換できないデータはスキップ
        except:
            continue
        # キーワードに一致するセルの番地を取得
        if value == keyword:
            cell_address = openpyxl.utils.get_column_letter(cell.column) +  str(cell.row)
            result.append(cell_address)

    return result

# 特定の行を検索
def search_row(row, keyword):
    result = []
    for cell in row:
        # セルのデータを文字列に変換
        try:
            value = str(cell.value)
        # 文字列に変換できないデータはスキップ
        except:
            continue
        # キーワードに一致するセルの番地を取得
        if value == keyword:
            cell_address = openpyxl.utils.get_column_letter(cell.column) +  str(cell.row)
            result.append(cell_address)
            
    return result

# 特定の範囲を検索
def search_rectangle(rectangle, keyword):
    result = []
    for col in rectangle:
        for cell in col:
            # セルのデータを文字列に変換
            try:
                value = str(cell.value)
            # 文字列に変換できないデータはスキップ
            except:
                continue
            # キーワードに一致するセルの番地を取得
            if value == keyword:
                cell_address = openpyxl.utils.get_column_letter(cell.column) +  str(cell.row)
                result.append(cell_address)
            
    return result

# シート全体を検索
def search_entire_sheet(ws, keyword):
    result = []
    for col in ws.columns:
        for cell in col:
            # セルのデータを文字列に変換
            try:
                value = str(cell.value)
            # 文字列に変換できないデータはスキップ
            except:
                continue
            # キーワードに一致するセルの番地を取得
            if value == keyword:
                cell_address = openpyxl.utils.get_column_letter(cell.column) +  str(cell.row)
                result.append(cell_address)
            
    return result

def main():
    filename = 'foo.xlsx'
    wb = openpyxl.load_workbook(filename)
    ws = wb['Sheet1']

    # result = search_column(ws['A'], 'scarf')
    # result = search_row(ws['42'], 'neutral')
    result = search_rectangle(ws['B5':'F38'], 'whisky')
    # result = search_entire_sheet(ws, 'soda_bottle')
    print(result)

if __name__ == '__main__':
    main()
実行結果
> python .\excel_search.py
['C16', 'C29']