Algorithm to get the excel-like column name of a number

后端 未结 10 1863
囚心锁ツ
囚心锁ツ 2020-11-30 18:08

I\'m working on a script that generate some Excel documents and I need to convert a number into its column name equivalent. For example:

1 => A
2 => B
         


        
10条回答
  •  无人及你
    2020-11-30 18:43

    Number convert to Excel column letters:

    /**
     * Number convert to Excel column letters
     * 
     * 1 = A
     * 2 = B
     * 3 = C
     * 27 = AA
     * 1234567789 = CYWOQRM
     * 
     * @link https://vector.cool/php-number-convert-to-excel-column-letters-2
     * 
     * @param int  $num       欄數
     * @param bool $uppercase 大小寫
     * @return void
     */
    function num_to_letters($n)
    {
        $n -= 1;
        for ($r = ""; $n >= 0; $n = intval($n / 26) - 1)
            $r = chr($n % 26 + 0x41) . $r;
        return $r;
    }
    

    ex:

    echo num_to_letters(1);          // A
    echo num_to_letters(2);          // B
    echo num_to_letters(3);          // C
    echo num_to_letters(27);         // AA
    echo num_to_letters(1234567789); // CYWOQRM
    

    Excel column letters convert to Number:

    /**
     * Excel column letters convert to Number
     *
     * A = 1
     * B = 2
     * C = 3
     * AA = 27
     * CYWOQRM = 1234567789
     * 
     * @link https://vector.cool/php-number-convert-to-excel-column-letters-2
     * 
     * @param string $letters
     * @return mixed
     */
    function letters_to_num($a)
    {
        $l = strlen($a);
        $n = 0;
        for ($i = 0; $i < $l; $i++)
            $n = $n * 26 + ord($a[$i]) - 0x40;
        return $n;
    }
    

    ex:

    echo letters_to_num('A');       // 1
    echo letters_to_num('B');       // 2
    echo letters_to_num('C');       // 3
    echo letters_to_num('AA');      // 27
    echo letters_to_num('CYWOQRM'); // 1234567789
    

提交回复
热议问题