はじめに
PHPExcelというライブラリがあります。PHPでExcelファイルを生成したり出来るので便利です。
$sheet->getColumnDimension('A')->setAutoSize(true);
なんてするとカラムの幅を自動調整してくれる、みたいな記事が出回ってるのですが、実際のところ、これできちんとカラムの幅が整うことはないと思ってほうがよいです。これは日本語フォントを使ってるときだけではなく、アルファベットのフォントでもいまいちきちんと計算されてないぽいです。
これをどうにかします。
どうするか
以下、コメントを入れつつ書いていきます。
//自動調整を有効にします。
$sheet->getColumnDimension('A')->setAutoSize(true);
//これをだと -1 が表示されます。
echo $sheet->getColumnDimension('A')->getWidth();
//以下のメソッドをまわすことで実際の幅が計算され、格納されるぽいです。
$sheet->calculateColumnWidths();
//ここがミソ。これを設定しておかないと以下のsetWidth()が無視されます。
$sheet->getColumnDimension('A')->setAutoSize(false);
//これをだと 8.140869 などと表示されます。
echo $sheet->getColumnDimension('A')->getWidth();
$width = $sheet->getColumnDimension('A')->getWidth();
// 50%増しにしてみました。もともとのカラムの幅によってそこまでは必要ないことも多いと思いますが、とりあえず。
$sheet->getColumnDimension('A')->setWidth($width * 1.5);
//12.2113035 という値になります。
echo $sheet->getColumnDimension('A')->getWidth();
このあと、ブックを保存するとよいです。
まとめ
PHPExcelは便利なんだけど、落とし穴が多いです。ハマると抜け出すのは大変なので、頑張って抜け出しましょう。