[Laravel]ExcelにデータをExportする方法

PHP

Laravel で Excelを出力してみる

SQLで抽出した結果をExcel形式で出力してみた
もっとかっこよくできるはずだけど

とりあえず、出力する事を念頭に・・・(言い訳

Maatwebsite の Excel ライブラリを使えるようにする

これはImportの説明でも書いた部分と重複するので

こちらの記事をご参考に、Excel Facardを
有効化するところまで実施してください

Exportしてみよー

今回の説明ではEloquentは使用しません
と言うか、今の私はEloquentを理解していません 笑

DBから出力情報を取得してExcel形式でExportするコードはコレだ!(勢い

Controller.php に記述!

// 出力データ取得
$users = DB::table('users')->get();

// Excel 定義
Excel::create('Sample', function($excel) use($users) {
  // Sheets 定義
  $excel->sheet('WorkSheet', function($sheet) use($users) {
    // 列幅指定なし
    $sheet->setAutoSize(false);
    // ヘッダ定義
    $header = array('name','sex','age','tall','weight');
    // 出力データ配列に追加
    $data = array($header);
    // 明細行
    foreach($users as $user) {
        array_push($data,
          array($user->name,$user->sex,$user->age,$user->tall,$user->weight)
        );
    }
    // A1に配列データを突っ込む
    $sheet->fromArray($data, NULL, 'A1', false, false);
  });
})->download('xlsx');

一応説明

Excel 定義

Excel::create('ファイル名', function($excel) { ~ })->download('xlsx');

コレでファイル形式 xlsx のファイルをダウンロードできる

Sheets 定義

$excel->sheet('シート名', function($sheet) { ~ });

各シート毎に処理を記述するブロックになるので
複数シートを作成する場合は、このブロックを増殖させればOK

$sheet 変数がシートのオブジェクト!

列幅設定

$sheet->setAutoSize(true);

を設定すると、列幅を自動調整してくれる!!優れもの!
でも、2バイト文字を含む列は正しく調整してくれない!!優れない!爆

ヘッダ定義

ベタに配列定義してやってます
かっこいい感じにするのは、、、また別途!

明細行

こちらもヘッダと同じ要領でやってます
カラムが多いと面倒ですね。。。工夫しよう

データをシートに反映

$sheet->fromArray($data, NULL, 'A1', false, false);

シートオブジェクトに配列データをA1から突っ込みます!と言う宣言

Exportは形にこだわらなければ簡単!

ざっくりでしたが
上記の流れで簡単にファイル出力が行えます

今回はExcel形式でしたが
CSV形式で出力したければ download の部分を csv に切り替えるだけです

超簡単!

積極的に使っていきたい機能ですね!