excel的列号:A B C D E ... X Y Z AA AB AC ...
可以看成是一个27进制的数字序列,A对应十进制1,Z对应十进制数字26,A@对应十进制27,AA对应28,这里补上@(ascii码为64)起到0的作用,也就把列号变成:@ A B ... Z A@ AA AB ...
// 求$col 的下一个列号
function excelColPlus($col)
{
//先转化成27进制数字
$col_chars = str_split($col);
$col_num = 0;
foreach ($col_chars as $col_char) {
$col_num = (ord($col_char) - 64) + 27 * ($col_num);
}
$col_num++;
//数字转化为答案
$ans = '';
while ($col_num) {
$ans .= chr(floor($col_num % 27) + 64);
$col_num = floor($col_num / 27);
}
// '@' 都变成A
$ans = str_replace('@','A',$ans);
// 反转
$ans = strrev($ans);
return $ans;
}
测试一下
$col = 'A';
for ($i = 0; $i < 100; $i++) {
echo $col . " ";
$col= excelColPlus($col);
}
输出结果