Laravelでmaatwebsite/excelを使ってエクセル出力する方法(ステップバイステップ解説)

Laravel

# Laravelでmaatwebsite/excelを使ってエクセル出力する方法(ステップバイステップ解説)

このドキュメントでは、Laravelプロジェクトに「maatwebsite/excel」パッケージを導入し、データベースの内容をエクセルファイルとして出力する方法を、初学者向けにわかりやすく解説します。

## 1. パッケージのインストール

まず、ターミナルで以下のコマンドを実行し、maatwebsite/excelをインストールします。

“`

composer require maatwebsite/excel

“`

> **注意**:

> – `composer`コマンドはプロジェクトのルートディレクトリで実行してください。

> – 権限や所有者の問題がある場合は、`sudo`や`–no-scripts`オプションを検討してください。

## 2. エクスポート用クラスの作成

エクセルに出力したい内容ごとに「エクスポートクラス」を作成します。ここでは「events」と「teams」テーブルを結合して出力する例を示します。

“`

php artisan make:export EventsTeamsExport

“`

このコマンドで `app/Exports/EventsTeamsExport.php` が作成されます。

## 3. エクスポートクラスの編集

`app/Exports/EventsTeamsExport.php` を以下のように編集します。

“`php

<?php

namespace App\Exports;

use Illuminate\Support\Facades\DB;

use Maatwebsite\Excel\Concerns\FromCollection;

class EventsTeamsExport implements FromCollection

{

    public function collection()

    {

        // eventsとteamsを結合して出力

        return DB::table(‘teams’)

            ->join(‘events’, ‘teams.event_id’, ‘=’, ‘events.id’)

            ->select(

                ‘teams.id as team_id’,

                ‘teams.name as team_name’,

                ‘teams.address’,

                ‘teams.tel’,

                ‘events.id as event_id’,

                ‘events.name as event_name’,

                ‘events.event_start’,

                ‘events.event_end’

            )

            ->get();

    }

}

“`

## 4. コントローラーにエクスポート処理を追加

例として `TeamController` にエクセル出力用のメソッドを追加します。

“`php

use App\Exports\EventsTeamsExport;

use Maatwebsite\Excel\Facades\Excel;

class TeamController extends Controller

{

    // …既存のメソッド…

    public function export()

    {

        return Excel::download(new EventsTeamsExport, ‘events_teams.xlsx’);

    }

}

“`

## 5. ルート(routes/web.php)にエクスポート用URLを追加

`routes/web.php` の `Route::middleware(‘auth’)->group(function () { … });` 内に以下を追加します。

“`php

Route::get(‘events-teams/export’, [App\Http\Controllers\TeamController::class, ‘export’])->name(‘events-teams.export’);

“`

## 6. 画面にエクセル出力ボタンを追加

たとえば `resources/views/teams/index.blade.php` の「新規作成」ボタンの横などに、以下のようにリンクを追加します。

“`blade

<a href=”{{ route(‘events-teams.export’) }}” class=”btn btn-success mb-3 ms-2″>Excel出力</a>

“`

## 7. 動作確認

– ブラウザで `/teams` 画面を開き、「Excel出力」ボタンをクリックすると、`events_teams.xlsx` ファイルがダウンロードされます。

– ファイルを開くと、eventsとteamsの結合データが確認できます。

## 注意事項

– ルート定義は必ず `Route::middleware(‘auth’)->group` の中に記述してください。

– コントローラーやエクスポートクラスの `use` 文の記述漏れに注意してください。

– DBの内容や結合条件はプロジェクトに合わせて調整してください。

– サーバーの権限やストレージリンク(`php artisan storage:link`)の設定も必要な場合があります。

## まとめ

この手順で、Laravelでmaatwebsite/excelを使ったエクセル出力機能を簡単に実装できます。エクスポート内容やレイアウトは、エクスポートクラスをカスタマイズすることで柔軟に対応できます。

何かエラーが出た場合は、エラーメッセージやログ(`storage/logs/laravel.log`)を確認しましょう。