はじまり
リサちゃん
うーむ、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」
おしまい
リサちゃん
よーし! いっちょあがり〜!
以上になります!
コメント