2021.12.13
簡単!Laravelで見出し付きのエクセルファイルをエクスポート
MaromaroのTakaです。
今回はLaravelでエクセルのエクスポート機能を簡単に実装する方法を記事にしました。
実装方法
EXCELの出力方法はいくつかやり方がありますが、
今回は直感的でわかりやすいVIEWからの出力方法で実装したいと思います。
Laravelのバージョンは5.8です。
最新バージョンまでは対応されています。
Laravel Excelのインストール
$ composer require maatwebsite/excel
Laravel Excelを使用するためにComposerを利用してmaatwebsite/excelのインストールを行います。Laravelのインストールフォルダで実行してください。
Exportファイルの作成
$ php artisan make:export ExcelExport
appフォルダの下にExports/ExcelExport.phpが作成されます。
下記のようなファイルが出来上がると思います。
このファイルはVIEWへの出力用のファイルです。
コントローラ→Exportファイル→VIEW(ダウンロード)
といった流れになります。
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
class ExcelExport implements FromCollection
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
}
}
VIEWからの出力が可能なように下記のように書き換えてください。
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Contracts\View\View; //追加
use Maatwebsite\Excel\Concerns\FromView; //追加
class ExcelExport implements FromView //書き換え
{
protected $data; //追加 変数名は適宜変更
protected $headings; //追加 変数名は適宜変更
//下記追加 上記変数名変更した場合は下記も変更してください。
function __construct($data,$headings) {
$this->data = $data;
$this->headings = $headings;
}
public function view(): View //書き換え
{
//下記追加 「excel.excel_export」の部分はviewまでのrootを記載してください。
return view('excel.excel_export', [
'datas' => $this->data,
'headings' => $this->headings,
]);
}
}
コントローラで出力用のデータの構築をする
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Exports\ExcelExport;
use Maatwebsite\Excel\Facades\Excel;
class ExcelController extends Controller
{
public function excel()
{
$data = DB::table('users')->get(); //データについては適宜用意してください。
$filename = 'hoge.'.xlsx'; //ファイル名
//エクセルの見出しを以下で設定
$headings = [
'ID',
'ユーザー名',
'メールアドレス',
];
//以下で先ほど作成したExcelExportにデータを渡す。
return Excel::download(new ExcelExport($data,$headings), $filename);
}
}
Excel出力用のVIEWを作成する
resourcesのviews以下に
excel/excel_export.blade.php
を作成してください。
名前は適宜変更してください。
変更した場合はExportファイルも変更お願いします。
中身は以下のようになります。
<table>
<thead>
<tr>
@foreach($headings as $head)
<th>{{$head}}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach($datas as $val)
<tr>
@foreach($val as $a)
<td>{{$a}}</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
テーブルタグで記載すればそのまま素直にエクセルファイルに出力されます。
各レイアウトやスタイルについてはタグにスタイルを当てれば変更可能となっています
以上でファイルの作成は完了となります。
Routeに以下の用に記載し、
Route::get('/excel', 'ExcelController@excel');
導線を任意の場所に張ればExcelの出力が可能となります。
以上、Takaでした。