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

2015-07-27 18:37:06 +08:00
 realpg
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的感觉……哪位大神有简单点的算法求灵感
2509 次点击
所在节点    PHP
15 条回复
oott123
2015-07-27 18:38:28 +08:00
不就是一种变相的 26 进制么是
oott123
2015-07-27 18:38:51 +08:00
(多打了个“是”字)
b821025551b
2015-07-27 18:41:30 +08:00
十进制转二十六进制
realpg
2015-07-27 18:43:15 +08:00
@oott123
@b821025551b
一语惊醒梦中人……妹的连着一个礼拜睡觉5小时写代码18小时,整个人都不好了……
人家都是萌萌哒,我现在是蒙蒙哒……

结贴
realpg
2015-07-27 19:00:07 +08:00
@oott123
@b821025551b
你们俩骗人……看来我之前还是没太蒙
这个没有0,用传统的自定义进制转换的轮子转换的不对 重新求……
imyip
2015-07-27 19:03:18 +08:00
减一
oott123
2015-07-27 20:45:07 +08:00
@realpg 26 进制,没错啊
0=A
1=B
...
25=Z
lujiajing1126
2015-07-27 20:49:47 +08:00
二十六进制
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
2015-07-27 21:00:27 +08:00
$i = 'Z';
$i++;
var_dump($i);exit;
realpg
2015-07-27 22:29:32 +08:00
@oott123 基本进制转换肯定是不对,常用字母替代位元的进制,仍然有0和十的概念,这样才能用除以进制基数的办法进行转换 显然我直接套了成品的任意进制转换轮子结果有偏差

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

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

@feiyuanqiu THX

这次是真结贴了 感谢楼上所有尝试帮忙的人

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/208711

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX