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 に切り替えるだけです
超簡単!
積極的に使っていきたい機能ですね!
 
 
