ExcelのC1R1形式からセルのラベル(A1、C7)形式への変換
KotlinでPOIを使ったプログラミングをしているのですが、その中でセルの座標(x=5、y=4)からセルのラベル(座標は0から開始のためこの場合F3)に変換する効率的なアルゴリズムがないかを知りたいです。
26進法で考えていますが、A〜Zまで来た次がAAのため簡単にできないと思っています。
以下、テストで作成し正しく動くものはできてはいます。ただ、直感的にわかりやすいプログラムではないため、もう少しわかりやすいものができないかと試行錯誤しています。
@JvmStatic
fun cellIndexToCellName(x: Int, y: Int): String {
var cellName = ""
var threshold = 26
var tempX = x
var loop = 0 // ループの2回目以降は値から1を引く
while (true) {
val mod26 = tempX % threshold
cellName = (mod26 + 65 - loop).toChar() + cellName
if (tempX < threshold) {
break
}
tempX = tempX / threshold
if (loop == 0) {
loop += 1
}
}
return cellName + (y + 1)
}
Kotlinで書いていますが、Java、C、C#等の言語でも構いません。