将数字转换为26个字符以外的字母

Chr*_*les 16 javascript jquery

我正在为可映射的电子表格导出功能创建一些客户端功能.

我正在使用jQuery来管理列的排序顺序,但是每个列都像Excel电子表格一样排序,例如abcd e ...... xyz aa ab ac ad等等

如何生成一个数字作为字母?我应该定义一个固定的值数组吗?或者有一种动态的方式来生成这个?

geo*_*org 50

我想你正在寻找这样的东西

    function colName(n) {
        var ordA = 'a'.charCodeAt(0);
        var ordZ = 'z'.charCodeAt(0);
        var len = ordZ - ordA + 1;
      
        var s = "";
        while(n >= 0) {
            s = String.fromCharCode(n % len + ordA) + s;
            n = Math.floor(n / len) - 1;
        }
        return s;
    }

// Example:

    for(n = 0; n < 125; n++)
            document.write(n + ":" + colName(n) + "<br>");
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但我希望看到背后的解释.像97这样的东西代表小'a'等. (3认同)

goo*_*taw 11

这是一个非常简单的方法:

function numberToLetters(num) {
    let letters = ''
    while (num >= 0) {
        letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[num % 26] + letters
        num = Math.floor(num / 26) - 1
    }
    return letters
}
Run Code Online (Sandbox Code Playgroud)

  • @库珀它有效。对于 701,返回“ZZ”,对于 702,返回“AAA”。然后依次:“AAB”、“AAC”。与 Excel 中相同。 (6认同)

小智 6

function getColumnDescription(i) {
  const m = i % 26;
  const c = String.fromCharCode(65 + m);
  const r = i - m;
  return r > 0
    ? `${getColumnDescription((r - 1) / 26)}${c}`
    : `Column ${c}`
}
Run Code Online (Sandbox Code Playgroud)

用法:

getColumnDescription(15)
"Column P"

getColumnDescription(26)
"Column AA"

getColumnDescription(4460)
"Column FOO"

Run Code Online (Sandbox Code Playgroud)