zoukankan      html  css  js  c++  java
  • Excel里数字列号转换为字符标签列

    在进行数据库导出到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,结束了。

  • 相关阅读:
    第一章 数据库基本操作
    Linux卸载jdk
    Jenkins Jboss的启动
    Jenkins启动脚本
    Linux SVN 创建项目
    测试工程师到底是干啥的?测试工程师转开发有多大希望?
    如何评审功能测试用例?
    Maven上传
    持续集成
    jquery获取所有checked的value
  • 原文地址:https://www.cnblogs.com/goldli/p/2417449.html
Copyright © 2011-2022 走看看