【Python】gspreadなどを使う時にセルを数値からアルファベット形式(A1 notation)に加工する

Code

はじまり

リサちゃん
リサちゃん

うーむ、gspreadって、セルを範囲で指定する時、(1,2)のセル形式でセルを操作できないのかあ・・・。

(1,2)のセルを(B1)みたいな感じで取得できないかなあ・・・

リサちゃん
リサちゃん

・・・お! こんな感じかなあ。一旦「ZZZ」まで出力できればいいかなあ。

今回のソース

以下のソースが、数値形式からアルファベット形式に変換するスクリプトになります。

src.py

def to_alpha_under_3digits(number : int) -> str:
    """
    Number of cell this method can format is 26 x 26 x 27 = 18252.
    """
    number_of_alphabet = 26
    h = int((number - 1 - number_of_alphabet) / (number_of_alphabet * number_of_alphabet))
    i = int((number - 1) / number_of_alphabet) - h * number_of_alphabet
    j = number - (i * number_of_alphabet) - (h * number_of_alphabet * number_of_alphabet)
    alpha = ""
    for k in h, i, j:
        if k != 0:
            alpha += chr(k + 64)
    return alpha

def get_cell_in_a1_notation(row_index : int, col_index : int) -> str:
    con_index_alpha =to_alpha_under_3digits(col_index)
    cell = "{1}{0}".format(str(row_index), str(con_index_alpha))
    return cell

def get_range_in_a1_notation(start_row_index : int, start_col_index : int, num_rows : int, num_cols : int) -> str:
    start_cell = get_cell_in_a1_notation(start_row_index, start_col_index)
    end_row_index = start_row_index + num_rows - 1
    end_col_index = start_col_index + num_cols - 1
    end_cell = get_cell_in_a1_notation(end_row_index, end_col_index)
    return "{}:{}".format(start_cell, end_cell)

alpha_1 = to_alpha_under_3digits(1)
alpha_2 = to_alpha_under_3digits(26)
alpha_3 = to_alpha_under_3digits(29)
alpha_4 = to_alpha_under_3digits(16784)
print(alpha_1)
print(alpha_2)
print(alpha_3)
print(alpha_4)

print("==============")

cell_1 = get_cell_in_a1_notation(1, 1)
cell_2 = get_cell_in_a1_notation(10, 26)
cell_3 = get_cell_in_a1_notation(15, 29)
print(cell_1)
print(cell_2)
print(cell_3)

print("==============")

range_1 = get_range_in_a1_notation(1, 1, 10, 26)
range_2 = get_range_in_a1_notation(10, 26, 15, 29)
range_3 = get_range_in_a1_notation(15, 29, 20, 16784)
print(range_1)
print(range_2)
print(range_3)
A
Z
AC
XUN
==============
A1
Z10
AC15
==============
A1:Z10
Z10:BB24
AC15:XVP34

今回のソースについて

アルファベットに変換する(to_alpha_under_3digits())

「ZZZ」までのアルファベットに変換することが出来ます。数値で言うと、18,252列までのインデックスに適用できます。

出力例:「A」、「Z」、「AC」、「XUN」など

アルファベット形式でセルを表現する(get_cell_in_a1_notation())

アルファベットに変換したセルを使用してセルを取得します。

出力例:「A1」、「Z10」、「AC15」など。

アルファベット形式でセル範囲を表現する(get_range_in_a1_notation())

アルファベットに変換したセルを使用してセル範囲を取得します。

出力例:「A1:Z10」、「Z10:BB24」、「AC15:XVP34」

おしまい

リサちゃん
リサちゃん

よーし! いっちょあがり〜!

以上になります!

コメント

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