我需要一个快速函数的帮助来生成一个包含 Excel 列名称的范围,该范围接收开始和结束索引作为输入。
i.e. Generate(2, 4) -> B, C, D
速度很重要,因为我需要生成多达 16,384 列的范围。
Graham 在这里对生成 Excel 列名的基本算法进行了精彩的解释:https ://stackoverflow.com/a/182924/1644733
将其放入 C# Generate() 函数的框架中,您可以执行以下操作:
static List<string> Generate(int start, int end) {
List<string> listOfColumns = new List<string>();
for (int i = start; i<=end; i++) {
listOfColumns.Add(NumberToColumn(i));
}
return listOfColumns;
}
static string NumberToColumn(int col) {
string retval = "";
// cannot be greater than 16384
if (col > 16384)
return "invalid";
int dividend = col;
while (dividend > 0)
{
int leftover = (dividend - 1) % 26;
char extraletter = (char) (65 + leftover);
retval = extraletter + retval;
dividend = (int)((dividend - leftover) / 26);
}
return retval;
}
在速度方面:如果您要经常生成许多(数千)此类范围,您可能希望在代码开头运行一次,在 1-16384 的整个范围内,然后使用根据需要直接在结果列表中的值。