Lazuli

らずり

PHPExcelでの書き込みはfromArrayメソッドが便利

PHPExcelのループ書き込みはあまり好きじゃない

たいした話じゃないけれど。

PHPには PHPExcel というライブラリがある。
読んで字のごとくPHPでExcelを作れる便利なライブラリ。

値を入力する場合、たいていループで入力していきます。
DBから値セットを取得してforeachで回すというのが定石でしょう。

<?php
$excel = new PHPExcel;
$sheet = $excel->getActiveSheet();
$sheet->setTitle('ジョジョシート');

$data_set = array(
  array('id' => 1, 'name' => 'ジョナサン', 'stand' => null),
  array('id' => 2, 'name' => 'ジョセフ', 'stand' => 'ハーミット・パープル'),
  array('id' => 3, 'name' => '空条承太郎', 'stand' => 'スター・プラチナ'),
  array('id' => 4, 'name' => '東方仗助', 'stand' => 'クレイジー・ダイヤモンド'),
  array('id' => 5, 'name' => 'ジョルノ', 'stand' => 'ゴールド・エクスペリエンス'),
  array('id' => 6, 'name' => '空条徐倫', 'stand' => 'ストーン・フリー'),
  array('id' => 7, 'name' => 'ジョニィ', 'stand' => 'タスク'),
  array('id' => 8, 'name' => '東方定助', 'stand' => 'ソフト&ウェット')
);


$row = 1;
foreach ($data_set as $data) {
  $col = 0;

  foreach ($data as $value) {
    $sheet->setCellValueByColumnAndRow($col++, $row, $value);
  }
  $row++;
}

$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5');
$writer->save('/tmp/jojo.xls');

f:id:app2641:20130904100444p:plain

このように。

setCellValueByColumnAndRowメソッドでセルに値を書き込んでいく。
第一引数が列数、第二引数に行数、第三引数に書き込みたい文字列を指定する。

しかし、foreachが入れ子になって個人的にあまり好きじゃない。

そこでfromArrayメソッドですよ

fromArrayというセル書き込みメソッドがあるのでそれを使えば一発で済む。

<?php
$sheet->fromArray($data_set, null, 'A1');

これだけ!簡単!
foreachいらない!

第一引数にデータセットの配列を、第二引数はなんだか知らん、第三引数はデータを入力しはじめるセル名を指定する。
前者とくらべてセル名の指定になるため、拡張性が低下するのが難点かな。


setCellValueByColumnAndRowについて書いてるブログはあってもfromArrayを書いてるのは見つからなかったので書き記しておく。

Enjoy!