码迷,mamicode.com
首页 > 其他好文 > 详细

Excel行列数字字母转换实现

时间:2015-05-13 12:53:30      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:javascript   excel   算法   索引   

背景:

     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小工具,用于行里字母数字索引转换,源码就不贴出来了,核心的都在上面,就是简单的包装了下,直接下载即可。


Excel行列数字字母转换实现

标签:javascript   excel   算法   索引   

原文地址:http://blog.csdn.net/hackersaillen/article/details/45690635

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!