最近在写系统导出表格的时候,需要动态生成列数据,精准的控制列样式并根据打印设置生成列。
在遇到这个问题时,首先就是ExcelJS的列头序号采用和excel一致的字母序号,就会导致无法用数字来获取列,需要通过自建函数来转换字母序号
经过多番测试才确定以下函数
function char(num){
let char=new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
let charS=char[parseInt(num/26)-1]
for(let i=0;i<26;i++){
if(parseInt(num/26)>=1){
char[i]=charS+char[i]
}
}
let charE=[]
if(parseInt(num/26)<1){
charE= char[num-25*(parseInt(num/26))]
}else{
charE= char[num-25*(parseInt(num/26))-parseInt(num/26)]
}
return charE
}
console.log(char(29))
//结果:AD
发现以上代码超过701列即会报错,所以在站内找到更好的解决方案,贴出来共享
var char = [];
function numToString(numm){
char.length = 0;
var numToStringAction = function(nnum){
var num = nnum - 1;
var a = parseInt(num / 26);
var b = num % 26;
char.push(String.fromCharCode(64 + parseInt(b+1)));
if(a>0){
numToStringAction(a);
}
}
numToStringAction(numm);
return char.reverse().join("");
}
还提供了字母转数字的方案
function stringTonum(a){
var str=a.toLowerCase().split("");
var num=0;
var al = str.length;
var getCharNumber = function(charx){
return charx.charCodeAt() -96;
};
var numout = 0;
var charnum = 0;
for(var i = 0; i < al; i++){
charnum = getCharNumber(str[i]);
numout += charnum * Math.pow(26, al-i-1);
};
return numout;
}