Translate a column index into an Excel Column Name

前端 未结 15 2286
花落未央
花落未央 2020-11-27 20:41

Given a columns\' index, how can you get an Excel column name?

The problem is trickier than it sounds because it\'s not just base-26. The columns

15条回答
  •  失恋的感觉
    2020-11-27 21:10

    This JavaScript version shows that at its core it's a conversion to base 26:

    function colName(x)
    {
        x = (parseInt("ooooooop0", 26) + x).toString(26);
        return x.slice(x.indexOf('p') + 1).replace(/./g, function(c)
        {
            c = c.charCodeAt(0);
            return String.fromCharCode(c < 64 ? c + 17 : c - 22);
        });
    }
    

    The .toString(26) bit shows that Joel Coehoorn is wrong: it is a simple base conversion.

    (Note: I have a more straight-forward implementation based on Dana's answer in production. It's less heavy, works for larger numbers although that won't affect me, but also doesn't show the mathematical principle as clearly.)

    P.S. Here's the function evaluated at important points:

    0 A
    1 B
    9 J
    10 K
    24 Y
    25 Z
    26 AA
    27 AB
    700 ZY
    701 ZZ
    702 AAA
    703 AAB
    18276 ZZY
    18277 ZZZ
    18278 AAAA
    18279 AAAB
    475252 ZZZY
    475253 ZZZZ
    475254 AAAAA
    475255 AAAAB
    12356628 ZZZZY
    12356629 ZZZZZ
    12356630 AAAAAA
    12356631 AAAAAB
    321272404 ZZZZZY
    321272405 ZZZZZZ
    321272406 AAAAAAA
    321272407 AAAAAAB
    8353082580 ZZZZZZY
    8353082581 ZZZZZZZ
    8353082582 AAAAAAAA
    8353082583 AAAAAAAB
    

提交回复
热议问题