目次
はじめに
無限に列が増え続ける(日付とか)エクセルを生成するときに列のアルファベットを求めたい。
導入手順
以下の再帰を利用したロジックを実装します。
// 引数$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
まとめ
もっと良いやり方がありそうですが、求めるだけならこれでいけると思います。
やはり公式の専用関数があったようです。
キさんコメントありがとうございます!