您的位置:首页 > 其它

Excel里数字列号转换为字符标签列

2012-04-07 12:28 281 查看
在进行数据库导出到Excel时,常会用到将列,如 第1列转换为 A,第2列转换为 B 的情况。这时你就要写算法了。

哈哈,我这里有现成的了。

先上代码,后解析。

function CellToRef(const X,Y:Integer):string;
function GetRef(const X:Integer):string;
var
token,I,R:Integer;
begin
Result:='';
token:=X;
repeat
I := token div 26;
R := token mod 26;
if R <> 0 then
begin
Result:=Char(R + 64) + Result;
end
else if I > 0 then
begin
Result := 'Z' + Result ;
Dec(I);
end;
token := I;
until I = 0;
end;
begin
Result:= GetRef(X) + IntToStr(Y);
end;

代码使用Delphi编写,等会我解析完算法,就可以换成其它语言了编写了。

函数 CellToRef有两个参数,X表示列号,Y表示行号,返回类型为字符串,如: CellToRef(1,1) 返回为 A1 。当然,这里的X,Y是从0开始还是从1开始要你自己界定。

内嵌函数GetRef有一个参数,X表示列号,当然在delphi,做为内嵌函数,这个参数是可以省掉的。返回值为字符串,功能为将一个数字列号转为相应的字符列号表示。如:GetRef(1)返回为 A。

算法解析: 我们知道英文字符有26个。即,A-Z(不使用小写形式的)。所以,对给写的数字X进行26进制的比较,

即 取整(I := token div 26;)与取余(R := token mod 26;)。之后判断是否整除,即:R = 0;如果没有整除,那么这个余数就做为结果中的一个字符了(Result:=Char(R + 64) + Result; 其中Char(R+64)为将数字+64之后转为英文字母)。如果可以整除,那么向结果中输出 Z (Result := 'Z' + Result ;) ,同时把数字X减去1(Dec(I));之后继续执行上述操作直到完全整除为止。

OK,结束了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐