背景:
Excel的列索引使用的是字母索引,某些开发中需要我们自己转换为数字,或者将数字转换为字母,比如基于Excel的公式,用户经常输入A1来表示引用Cell(0,0)的值。这时候我们需要把A转换为数字索引号;在显示的时候我们需要把0,0这样的坐标转换为A1显示,就需要把数字索引转换为字母索引。比如下面是LZ正做的一个项目,用到的:
废话不多说,直接看实现,下面是基于JavaScript的实现(转换为Java语言很容易),算法不做描述了,其实就是一个26进制的转换,可以参考16进制转换算法。
字母转换为数字:
/** * 字母转换为数字 * @param {String} str */ function str2Num(str) { var base = 'A'.charCodeAt(0);//找到A的码表大小 var r = 0; for (var i = 0; i < str.length; i++) {//遍历每个位置 <span style="white-space:pre"> </span>r = r * 26 + str.charCodeAt(i) - base + 1; } return r - 1; };
上面算法不难理解,只要学过数据结构、算法的应该都知道那个“输入m输出m个1”二者类似,以此遍历每个位置,然后乘以该位置的基数即可。
数字转换为字母:
/** * 将数字索引转换为英文字母 * @param {Number} colIndex */ function num2Str(colIndex) { colIndex += 1; if (colIndex <= 0) { return ""; } var str = ""; var result = ""; var A = 'A'; while (colIndex != 0) { <span style="white-space:pre"> </span>var num = colIndex % 26; // 取最后一位 var c = A.charCodeAt(0) + num - 1; colIndex = Math.floor(colIndex / 26); //返回值小于等于其数值参数的最大整数值。 // 对于26的特殊处理 if (num == 0) { //c = A.charCodeAt(0) + 26; str = 'Z'; colIndex -= 1; //退位 } else { str = String.fromCharCode(c); } // 3.插入 result += str; } if (result.length > 1) { result = result.split('').reverse().join(""); } return result; };
数字转换为字母的算法类似10进制转换为16进制,其实就是其余。
下面是基于上面的Web小工具,用于行里字母数字索引转换,源码就不贴出来了,核心的都在上面,就是简单的包装了下,直接下载即可。
时间: 2024-10-25 09:08:28