V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
realpg
V2EX  ›  PHP

PHP 如何简单的生成 EXCEL 的列号?

  •  1
     
  •   realpg · 2015-07-27 18:37:06 +08:00 · 2509 次点击
    这是一个创建于 3400 天前的主题,其中的信息可能已经有所发展或是发生改变。
    EXCEL的列号,1~26列列号是A B C D E F …… X Y Z 然后26以后就变成了AA AB AC AD AE AF AG AH …… AX AY AZ BA BB …… ZZ AAA AAB AAC ……

    求一个函数能快速给定数字的列号返回EXCEL标准列号
    我自己写的感觉都好2B的感觉……哪位大神有简单点的算法求灵感
    15 条回复    2015-07-28 08:26:03 +08:00
    oott123
        1
    oott123  
       2015-07-27 18:38:28 +08:00 via Android
    不就是一种变相的 26 进制么是
    oott123
        2
    oott123  
       2015-07-27 18:38:51 +08:00 via Android
    (多打了个“是”字)
    b821025551b
        3
    b821025551b  
       2015-07-27 18:41:30 +08:00
    十进制转二十六进制
    realpg
        4
    realpg  
    OP
       2015-07-27 18:43:15 +08:00
    @oott123
    @b821025551b
    一语惊醒梦中人……妹的连着一个礼拜睡觉5小时写代码18小时,整个人都不好了……
    人家都是萌萌哒,我现在是蒙蒙哒……

    结贴
    realpg
        5
    realpg  
    OP
       2015-07-27 19:00:07 +08:00
    @oott123
    @b821025551b
    你们俩骗人……看来我之前还是没太蒙
    这个没有0,用传统的自定义进制转换的轮子转换的不对 重新求……
    imyip
        6
    imyip  
       2015-07-27 19:03:18 +08:00 via Android
    减一
    oott123
        7
    oott123  
       2015-07-27 20:45:07 +08:00
    @realpg 26 进制,没错啊
    0=A
    1=B
    ...
    25=Z
    lujiajing1126
        8
    lujiajing1126  
       2015-07-27 20:49:47 +08:00 via Android
    二十六进制
    b821025551b
        9
    b821025551b  
       2015-07-27 20:49:53 +08:00
    0→A
    1→B
    2→C
    3→D
    4→E
    .
    .
    .
    25→Z
    26→AA
    -------------------------------------
    1→A
    2→B
    3→C
    4→D
    5→E
    .
    .
    .
    26→Z
    27→AA
    两种区别就是从0开始还是从1开始,对应每位(26进制)转换做加减1操作。
    feiyuanqiu
        10
    feiyuanqiu  
       2015-07-27 21:00:27 +08:00   ❤️ 2
    $i = 'Z';
    $i++;
    var_dump($i);exit;
    realpg
        11
    realpg  
    OP
       2015-07-27 22:29:32 +08:00
    @oott123 基本进制转换肯定是不对,常用字母替代位元的进制,仍然有0和十的概念,这样才能用除以进制基数的办法进行转换 显然我直接套了成品的任意进制转换轮子结果有偏差

    @feiyuanqiu 卧槽 好神奇 这是什么机制?有没有相关介绍文档?

    @b821025551b 这对应关系我也知道,但是扩展开来怎么写?
    virusdefender
        12
    virusdefender  
       2015-07-27 22:45:17 +08:00
    leetcode 上还有个这样的算法题呢
    feiyuanqiu
        13
    feiyuanqiu  
       2015-07-27 22:54:54 +08:00
    ligyxy
        14
    ligyxy  
       2015-07-27 23:23:03 +08:00
    曾经用R写了一个,和进制转换比起来就是多处理一步位移
    https://gist.github.com/ligyxy/084470b321ff724118e2
    realpg
        15
    realpg  
    OP
       2015-07-28 08:26:03 +08:00
    @ligyxy THX
    睡了一觉起来 精神好一点自己也写出来了
    写完才想起来去看了一下PHP源代码里的自增不就完了……

    @feiyuanqiu THX

    这次是真结贴了 感谢楼上所有尝试帮忙的人
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2780 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 07:30 · PVG 15:30 · LAX 23:30 · JFK 02:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.