【Python】エクセルの列番号を数字に変換する

Python
田中太郎
田中太郎

エクセルの列番号は”AA” だったり”BC”みたいに表示されています

Pythonで扱いやすいように数字に変換します

やりたいこと

エクセルのセル位置は「アルファベット」+ 「数字」で表されます

pythonでエクセルファイルを読み込んで処理するとき、「AB28」と入力しても何行、何列かはわかりません

そこで、「AB28」を 「28, 28」のように数字に変換するスクリプトを作成しました

スクリプト

スクリプトです

import re
import sys

def split_cell(cell):
    """「AB28」を「AB」と「28」に分けてリストで返します。"""
    column = re.search(r"[A-Z]+", cell).span()
    line = re.search(r"[0-9]+", cell).span()
    return [cell[column[0]:column[1]], cell[line[0]:line[1]]]

def convert_alphabet2num(alphabet):
    """アルファベットと数字に変換します。「AB」なら「28」に変換します。"""
    if not re.search(r"\A[A-Z]+\Z", alphabet):
        sys.exit("ERROR: '{}' is invalid value".format(alphabet))
    num = 0
    for cnt, val in enumerate(list(alphabet)):
        num += pow(26, len(alphabet) - cnt - 1)*(ord(val) - ord('A') + 1)
    return num

def convert_cell2num(cell):
    """「AB28」を数字のリストに変換します。[28, 28]が返ってきます。"""
    if not re.search(r"\A[A-Z]+[0-9]+\Z", cell):
        sys.exit("ERROR: '{}' is invalid value".format(cell))
    return [convert_alphabet_to_num(split_cell(cell)[0]), int(split_cell(cell)[1])]

if __name__ == "__main__":
    cell = "AB28"
    print(convert_cell2num(cell))

コメント

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