忘れないように記録しとこ

カバの樹

[PhpSpreadsheet]列番号から列アルファベットに変換する

2019年6月3日

はじめに

無限に列が増え続ける(日付とか)エクセルを生成するときに列のアルファベットを求めたい。

 

導入手順

以下の再帰を利用したロジックを実装します。

  // 引数$xに列番号を投げ込む
    function getCalName($x)
    {
       $callback = '';
       $floor = intval(floor(($x-1) / 26));
       $remainder = ($x-1) % 26;
    // アルファベット数で割って1以上に割り切れたら再帰
       if($floor > 0)
           $callback = $this->getCalName($floor);// 自己再帰

       return $callback.$this->getAlphabet($remainder);
    }

    function getAlphabet($col)
    {
        $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'
        ];
        return $arr[$col];
    }

 

コメントより(2020.11.9

コメントでPhpSpredsheetに専用の関数があることを教えて貰いました。

use PhpOffice\PhpSpreadsheet\Cell\Coordinate;

$ColumnName = Coordinate::stringFromColumnIndex(1);
echo $ColumnName;
// => A

https://github.com/PHPOffice/PhpSpreadsheet/blob/5c18bb5798be3c186e89b534de691a20beab21a7/src/PhpSpreadsheet/Cell/Coordinate.php#L294-L310

 

まとめ

もっと良いやり方がありそうですが、求めるだけならこれでいけると思います。

やはり公式の専用関数があったようです。
キさんコメントありがとうございます!

 

  • B!