数值、Excel列互转

20 篇文章 0 订阅
12 篇文章 0 订阅
/**
 * 数值转Excel列
 * @param int $num 整数
 * @return string
 */
function num2excel(int $num): string
{
    $str = '';
    $arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];

    while ($num > -1) {
        $str = $arr[$num % 26] . $str;
        $num = floor($num / 26) - 1;
    }

    return $str;
}

/**
 * excel列转数值
 * @param string $str excel列
 * @return int
 */
function excel2num(string $str): int
{
    $arr = ['A' => 0, 'B' => 1, 'C' => 2, 'D' => 3, 'E' => 4, 'F' => 5, 'G' => 6, 'H' => 7, 'I' => 8, 'J' => 9, 'K' => 10, 'L' => 11, 'M' => 12, 'N' => 13, 'O' => 14, 'P' => 15, 'Q' => 16, 'R' => 17, 'S' => 18, 'T' => 19, 'U' => 20, 'V' => 21, 'W' => 22, 'X' => 23, 'Y' => 24, 'Z' => 25];

    $str = strrev($str); // 反转

    $len = strlen($str);
    $num = $arr[$str[0]];

    for ($i = 1; $i < $len; ++ $i) {
        $num += ($arr[$str[$i]] + 1) * pow(26, $i);
    }

    return $num;
}

v(num2excel(1234));
v(excel2num('AUM'));

运行结果:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值