はじめに

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

 

導入手順

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

  // 引数$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];
    }

まとめ

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

 

 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください