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