JS仿Excel数字转英文字母
前言
开发的时候遇到一个需求,其中需要使用js模拟Excel,将数字转换成Excel一样的英文字母。本质上其实就是进制转换,10进制转换成26进制。即:
1 => A
26 => Z
27 => AA
703 => AAA
正文
数字转英文字母
1) 转换结果的最后一位可以根据数字对26的求余计算得到,即:
27 对 26 求余,余数为1,转换为英文字母为A。
27 % 26 = 1 … 1 => A
703 对 26求余,余数为1,转换为英文字母为A。
703 % 26 = 27 … 1 => A
2)转换结果 – 其对26的余数 可以确定转换结果的前面部分,循环直到转换结束即可。
完整代码:
xxxxxxxxxx221function convertDSTo26BS(num) {2 let code = '';3
4 // 检验数字5 let reg = /^\d+$/g;6 if (!reg.test(num)) return code;7
8 // 利用余数倒序求转换结果9 while (num > 0) {10 let temp = num % 26;11 if (temp === 0) temp = 26;12
13 // 利用ASCII转换成英文14 code = String.fromCharCode(64 + parseInt(temp)) + code;15 num = (num - temp) / 26;16 }17 return code;18}19
20convertDSTo26BS(26); // Z21convertDSTo26BS(27); // AA22convertDSTo26BS(703); // AAA注:转换成英文时使用的是 64,而不是 65,因为想要的对应关系是 1=>A,如果使用65的话,将会变成0 => A
英文字母转数字
同理,附带上英文字母转数字的代码:
xxxxxxxxxx131function convert26BSToDS(code) {2 let reg = /^[A-Z]+$/g;3 if (!reg.test(code)) return -1;4
5 let num = 0;6 for (let i = code.length - 1, j = 1; i >= 0; i--, j *= 26) {7 num += (code[i].charCodeAt(0) - 64) * j;8 }9 return num;10}11
12convert26BSToDS('AAA'); // 70313convert26BSToDS('AA'); // 27注:与上同理,此处使用64,而非65。
