Laravelでは、エクセルを出力するためのプラグインがたくさんあります。
中でも、エクスポート、インポートに関するプラグインは充実しています。
エクスポートのような単純な一覧表ではなく、請求書のような複雑なものも作成することができます。
この場合、blade を利用します。
本記事では、bladeを利用した、エクセル出力の方法を解説しています。
Exportファイルの生成
下記のコマンドを実行して、Export ファイルを生成します。
1 2 3 |
[hoge@sv laravel_app]$ php artisan make:export Export INFO Export [app/Exports/Export.php] created successfully. |
Exportファイルの変更
デフォルトでは collection から表を作成する設定になっていますが、Viewから生成されるように設定し、blade を利用できるようにします。
変更前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php namespace App\Exports; use Maatwebsite\Excel\Concerns\FromCollection; class Export implements FromCollection { /** * @return \Illuminate\Support\Collection */ public function collection() { // } } |
変更後
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php namespace App\Exports; use Illuminate\Contracts\View\View; use Maatwebsite\Excel\Concerns\FromView; class Export implements FromView { private $view; public function __construct(View $view) { $this->view = $view; } /** * @return View */ public function view(): View { return $this->view; } } |
Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php namespace App\Http\Controllers; use App\Exports\Export; class DemoController extends Controller { public function excel() { $users = User::with('company.companyType', 'role')->get(); $view = \view('demo.excel'); return \Excel::download(new Export($view), 'test.xlsx'); } } |
View
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<table> <thead> <tr> <th>{{ __('users.id') }}</th> <th>{{ __('users.name') }}</th> <th>{{ __('users.email') }}</th> <th>{{ __('users.created_at') }}</th> <th>{{ __('users.updated_at') }}</th> </tr> </thead> <tbody> @foreach ($models as $model) <tr> <td>{{ $model->id }}</td> <td>{{ $model->name }}</td> <td>{{ $model->email }}</td> <td>{{ $model->created_at }}</td> <td>{{ $model->updated_at }}</td> </tr> @endforeach </tbody> </table> |