Javascript 将数字转换为超过26个字符的字母

Javascript 将数字转换为超过26个字符的字母,javascript,jquery,Javascript,Jquery,我正在为可映射电子表格导出功能创建一些客户端函数 我使用jQuery来管理列的排序顺序,但每一列的排序都像Excel电子表格一样,即a b c d e……x y z aa ab ac ad等 如何将数字生成为字母?我应该定义一个固定的值数组吗?或者有没有一种动态的方法来生成它?您可以使用这样的代码,假设numbers包含列的编号。因此,在此代码之后,您将获得列的字符串名称: var letters = ['a', 'b', 'c', ..., 'z']; var numbers = [1, 2,

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

我使用jQuery来管理列的排序顺序,但每一列的排序都像Excel电子表格一样,即a b c d e……x y z aa ab ac ad等


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

您可以使用这样的代码,假设
numbers
包含列的编号。因此,在此代码之后,您将获得列的字符串名称:

var letters = ['a', 'b', 'c', ..., 'z'];
var numbers = [1, 2, 3, ...];
var columnNames = [];
for(var i=0;i<numbers.length;i++) {
    var firstLetter = parseInt(i/letters.length) == 0 ? '' : letters[parseInt(i/letters.length)];
    var secondLetter = letters[i%letters.length-1];
    columnNames.push(firstLetter + secondLetter);
}
var字母=['a','b','c',…,'z'];
变量数=[1,2,3,…];
var columnNames=[];

对于(var i=0;i我认为您正在寻找类似的东西

函数colName(n){
var ordA='a'.charCodeAt(0);
var ordZ='z'.charCodeAt(0);
var len=ordZ-ordA+1;
var s=“”;
而(n>=0){
s=字符串.fromCharCode(n%len+ordA)+s;
n=数学楼层(n/len)-1;
}
返回s;
}
//例如:
对于(n=0;n<125;n++)

document.write(n+“:”+colName(n)+“
”;
这是一种非常简单的方法:

函数编号字母(num){
让字母=“”
而(num>=0){
字母='abcdefghijklmnopqrstuvxyz'[num%26]+字母
num=数学楼层(num/26)-1
}
回信
}

如果您的数据是二维数组,例如

var data = [
  ['Day', 'score],
  ['Monday', 99],
];
您可以将行/列映射到电子表格单元格编号,如下所示(基于上面的代码示例):

例如,数据[0][0]中的“日”值将进入电子表格单元格A1

> getSpreadSheetCellNumber(0, 0)
> "A1"
当您有26个以上的列时,也可以使用此选项:

> getSpreadSheetCellNumber(0, 26)
> "AA1"
用法:

getColumnDescription(15)
"Column P"

getColumnDescription(26)
"Column AA"

getColumnDescription(4460)
"Column FOO"


谢谢。这很好用,但它不是从一个字符开始的,即a,b,c,d…x,y,z,aa,ab,ac?回答得好,但我想看看后面的解释。像97代表小“a”等@georg你能解释一下基本转换是如何工作的吗?我是说为什么
n=Math.floor(n/len)-1
?你为什么要在这里减去
1
?我很难理解它背后的意思。我到处读了几个答案,但不明白它为什么有效。请解释:)@YaseenMollik:嗨,请看一个好的解释。
Math.floor()
是一个浮点运算,上面已经计算了n%len,这一行是
n=(n-n%len)/len-1。在这个用例中,它不是一个性能问题,但从我的角度来看,它更容易阅读,因为没有使用FPU op来获取int
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}`
}
getColumnDescription(15)
"Column P"

getColumnDescription(26)
"Column AA"

getColumnDescription(4460)
"Column FOO"