Fastest function to generate Excel column letters in C#

前端 未结 21 1768
无人共我
无人共我 2020-11-29 02:30

What is the fastest c# function that takes and int and returns a string containing a letter or letters for use in an Excel function? For example, 1 returns \"A\", 26 return

21条回答
  •  孤独总比滥情好
    2020-11-29 02:51

    This is written in Java, but it's basically the same thing.

    Here's code to compute the label for the column, in upper-case, with a 0-based index:

    public static String findColChars(long index) {
        char[] ret = new char[64];
        for (int i = 0; i < ret.length; ++i) {
            int digit = ret.length - i - 1;
            long test = index - powerDown(i + 1);
            if (test < 0)
                break;
            ret[digit] = toChar(test / (long)(Math.pow(26, i)));
        }
        return new String(ret);
    }
    
    private static char toChar(long num) {
        return (char)((num % 26) + 65);
    }
    

    Here's code to compute 0-based index for the column from the upper-case label:

    public static long findColIndex(String col) {
        long index = 0;
        char[] chars = col.toCharArray();
        for (int i = 0; i < chars.length; ++i) {
            int cur = chars.length - i - 1;
            index += (chars[cur] - 65) * Math.pow(26, i);
        }
        return index + powerDown(chars.length);
    }
    
    private static long powerDown(int limit) {
        long acc = 0;
        while (limit > 1)
            acc += Math.pow(26, limit-- - 1);
        return acc;
    }
    

提交回复
热议问题