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