Excel の列名インデックスを生成するメソッドです。
const int ColumnBase = 26;
const int DigitMax = 7; // ceil(log26(Int32.Max))
const string Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/// <summary>
/// 文字列のインデックスを取得する
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public static string IndexToColumn(int index)
{
if (index <= 0)
{
throw new IndexOutOfRangeException("インデックスは正数を指定してください。");
}
if (index <= ColumnBase)
{
// 26文字目までは単純にインデックスから取得。
return Digits[index - 1].ToString();
}
// 26文字以降の処理。
var sb = new StringBuilder().Append(' ', DigitMax);
var current = index;
var offset = DigitMax;
while (current > 0)
{
// 末尾となる文字列のインデックスをセット。
sb[--offset] = Digits[--current % ColumnBase];
current /= ColumnBase;
}
// 整形して返却。
return sb.ToString(offset, DigitMax - offset);
}
使用例。
for (int i = 1; i < 1000; i++)
{
var col = IndexToColumn(i);
Console.WriteLine(col);
}