凌的博客

您现在的位置是: 首页 > 学无止境 > PHP > 

PHP

使用数字 依次获取excel键值

2023-09-04 PHP 558
class Tool{
    // 定义一个函数,根据给定的数字返回对应的列名
    public static function getColumnName(int $num): string
    {
            // 初始化一个空字符串
            $columnName = "";
            $num++;
            // 循环直到数字为0
            while ($num > 0) {
                // 计算当前数字对26取余的结果,作为列名的最后一个字母
                $remainder = $num % 26;
                // 如果余数为0,说明当前数字是26的倍数,那么列名的最后一个字母应该是Z
                if ($remainder == 0) {
                    $columnName = "Z" . $columnName;
                    // 将数字减去26,然后除以26,得到下一轮的数字
                    $num = ($num - 26) / 26;
                } else {
                    // 如果余数不为0,那么列名的最后一个字母应该是余数对应的字母,从A到Y
                    $columnName = chr($remainder + 64) . $columnName;
                    // 将数字除以26,得到下一轮的数字
                    $num = floor($num / 26);
                }
            }
            // 返回列名
            return $columnName;
    }
    
        // 定义一个函数,根据给定的列名返回对应的键值
        public static function getColumnValue(string $columnName): int
        {
            // 初始化一个变量,存储键值
            $columnValue = 0;
            // 将列名转换为大写字母
            $columnName = strtoupper($columnName);
            // 获取列名的长度
            $length = strlen($columnName);
            // 循环遍历列名的每个字母,从左到右
            for ($i = 0; $i < $length; $i++) {
                // 获取当前字母的ASCII码,减去64,得到当前字母对应的数字,从1到26
                $num = ord($columnName[$i]) - 64;
                // 将当前数字乘以26的相应次方,然后累加到键值中
                $columnValue += $num * pow(26, $length - $i - 1);
            }
            // 将键值减去1,得到从0开始的键值
            $columnValue -= 1;
            // 返回键值
            return $columnValue;
        }    
    
    
    
}

Tool::getColumnName(0);//A

Tool::getColumnValue('A');//0


文章评论

0条评论