1

我需要一个快速函数的帮助来生成一个包含 Excel 列名称的范围,该范围接收开始和结束索引作为输入。

i.e. Generate(2, 4) -> B, C, D

速度很重要,因为我需要生成多达 16,384 列的范围。

4

1 回答 1

0

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 的整个范围内,然后使用根据需要直接在结果列表中的值。

于 2012-10-22T18:20:08.573 回答