为Excel生成列范围(c#)
我需要一个快速函数的帮助来生成一个名为Excel列的范围,它接收起始和结束索引作为input。
ie Generate(2, 4) -> B, C, D
速度很重要,因为我需要生成多达16,384列的范围。
生成Excel列名的基本algorithm已经被Graham在这里精彩地解释了: 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的整个范围内,然后使用根据需要直接在结果列表中的值。