我正在为可映射的电子表格导出功能创建一些客户端功能。
我正在使用jQuery来管理列的排序顺序,但是每个列的排序都像Excel电子表格一样,例如,... x y z aa ab ac ad等等
如何生成一个数字作为字母?我应该定义一个固定的值数组吗?或者是否有一种动态的方式来生成它?
答案 0 :(得分:48)
我认为你正在寻找类似的东西
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>");
答案 1 :(得分:3)
这是一个非常简单的方法:
function numberToLetters(num) {
let letters = ''
while (num >= 0) {
letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[num % 26] + letters
num = Math.floor(num / 26) - 1
}
return letters
}
答案 2 :(得分:2)
如果您的数据是二维数组,例如
var data = [
['Day', 'score],
['Monday', 99],
];
您可以按如下方式将行/列映射到电子表格单元格编号(基于上面的代码示例):
function getSpreadSheetCellNumber(row, column) {
let result = '';
// Get spreadsheet column letter
let n = column;
while (n >= 0) {
result = String.fromCharCode(n % 26 + 65) + result;
n = Math.floor(n / 26) - 1;
}
// Get spreadsheet row number
result += `${row + 1}`;
return result;
};
例如data[0][0] 中的“Day”值将出现在电子表格单元格 A1 中。
> getSpreadSheetCellNumber(0, 0)
> "A1"
当您有 26 列以上时,这也适用:
> getSpreadSheetCellNumber(0, 26)
> "AA1"
答案 3 :(得分:2)
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"
答案 4 :(得分:1)
您可以使用这样的代码,假设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);
}