LaravelアプリでExcelおよびCSVファイルをインポートおよびエクスポートする

このチュートリアルでは、Maatwebsite/Laravel-Excel パッケージを使用して PHP MySQL データベースと通信しながら、Laravel 8 アプリケーションで Excel および CSV ファイルを簡単にインポートおよびエクスポートする方法を学びます。

ステップ 1: Laravel プロジェクトをインストールする

まず、ターミナルを開いて次のコマンドを実行して、新しい laravel プロジェクトを作成します。

composer create-project --prefer-dist laravel/laravel laravel-excel

または、Laravel インストーラーをグローバル Composer 依存関係としてインストールした場合:

laravel new laravel-excel

ステップ 2: データベースの詳細を構成する

インストール後、プロジェクトのルート ディレクトリに移動し、.env ファイルを開き、次のようにデータベースの詳細を設定します。

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=<DATABASE NAME>
DB_USERNAME=<DATABASE USERNAME>
DB_PASSWORD=<DATABASE PASSWORD>

関連記事:  Laravel で検証を使用してファイルと画像をアップロードする

ステップ 3: カスタム Web サイト/Excel パッケージをインストールする

Laravel Excelはcomposer経由でインストールできます。インストールするにはこのコマンドを実行する必要があります。

composer require maatwebsite/excel

プラグインのサービスをプロバイダーとエイリアスに登録する

次のコードをconfig/app.phpファイル内に配置できます  。

'providers' => [
  Maatwebsite\Excel\ExcelServiceProvider::class,
 ],  

'aliases' => [ 
  'Excel' => Maatwebsite\Excel\Facades\Excel::class,
], 

ベンダーを実行し、コマンドを公開し、構成を公開します。

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config

これにより、 という名前の新しい構成ファイルが作成されます config/excel.php

ステップ 4: 偽のデータの生成とテーブルの移行

最初のステップでは、ユーザー テーブルを移行します。移行が正常に実行された後、2 番目のステップに進みました。

php artisan migrate

第 2 ステップでは、偽のレコードを生成します。ここでは、tinker を使用して偽のレコードを生成します。要件に応じて別の方法を使用できます。

php artisan tinker

ティンカーを開いた後、このコマンドを実行してデータベースに偽のレコードを生成する必要があります。

User::factory()->count(100)->create();

ステップ 5: ルートを作成する

このステップでは、ファイルのインポートおよびエクスポートのリクエストを処理するルートを追加します。

use App\Http\Controllers\UserController;

Route::get('/file-import',[UserController::class,'importView'])->name('import-view');
Route::post('/import',[UserController::class,'import'])->name('import');
Route::get('/export-users',[UserController::class,'exportUsers'])->name('export-users');

ステップ 6: インポート クラスを作成する

Maatwebsite はインポート クラスを構築する方法を提供しており、それをコントローラーで使用する必要があります。したがって、新しい Import クラスを作成するのは素晴らしい方法です。したがって、次のコマンドを実行し、そのファイルの次のコードを変更する必要があります。

php artisan make:import ImportUser --model=User

app/Imports/ImportUser.php

<?php

namespace App\Imports;

use App\Models\User;
use Maatwebsite\Excel\Concerns\ToModel;

class ImportUser implements ToModel
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new User([
            'name' => $row[0],
            'email' => $row[1],
            'password' => bcrypt($row[2]),
        ]);
    }
}

ここでは、CSV または Excel の列値を Eloquent モデルにマップすることができます。インポート クラスでマップするときに、その CSV または Excel 列をフォーマットする必要があります。

ステップ 7: エクスポート クラスの作成

Maatwebsite はエクスポート クラスを構築する方法を提供しており、それをコントローラーで使用する必要があります。したがって、新しいエクスポート クラスを作成するのは素晴らしい方法です。したがって、次のコマンドを実行し、そのファイルの次のコードを変更する必要があります。

php artisan make:export ExportUser --model=User

app/Exports/ExportUser.php

<?php

namespace App\Exports;

use App\Models\User;
use Maatwebsite\Excel\Concerns\FromCollection;

class ExportUser implements FromCollection
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        return User::select('name','email')->get();
    }
}

ステップ 8: コントローラーの作成

次に、CSV または Excel ファイルのレコードをアップロードするためのフォームを表示するコントローラーを作成する必要があります。UserController以下のコマンドを使用して、という名前のコントローラーを作成しましょう。

php artisan make:controller UserController

上記のコマンドを実行すると、 app/Http/Controllers ディレクトリ に コントローラー ファイル UserController.phpが作成されます。UserController.php ファイルを開き、このコードをそのファイルに挿入します。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use App\Imports\ImportUser;
use App\Exports\ExportUser;
use App\Models\User;

class UserController extends Controller
{
    public function importView(Request $request){
        return view('importFile');
    }

    public function import(Request $request){
        Excel::import(new ImportUser, $request->file('file')->store('files'));
        return redirect()->back();
    }

    public function exportUsers(Request $request){
        return Excel::download(new ExportUser, 'users.xlsx');
    }
}

ステップ 9: ブレードの作成 / ファイルの表示

最後のステップに到達しました。一般に、ここではフロントエンドを介してインポートとエクスポートを処理するためのビューを定式化する必要があります。 ビューを設定するには、resources/views/importFile.blade.phpファイルを作成します 。次のコードをブレード ビュー ファイル内に配置します。

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Laravel 8 Import Export Excel & CSV File - TechvBlogs</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
</head>

<body>
    <div class="container mt-5 text-center">
        <h2 class="mb-4">
            Laravel 8 Import Export Excel & CSV File - <a href="https://techvblogs.com/blog/laravel-import-export-excel-csv-file?ref=repo" target="_blank">TechvBlogs</a>
        </h2>
        <form action="{{ route('import') }}" method="POST" enctype="multipart/form-data">
            @csrf
            <div class="form-group mb-4">
                <div class="custom-file text-left">
                    <input type="file" name="file" class="custom-file-input" id="customFile">
                    <label class="custom-file-label" for="customFile">Choose file</label>
                </div>
            </div>
            <button class="btn btn-primary">Import Users</button>
            <a class="btn btn-success" href="{{ route('export-users') }}">Export Users</a>
        </form>
    </div>
</body>

</html>

Laravelアプリケーションを実行する

最後に、Laravel アプリケーションを実行する必要があります。このためには、コマンド プロンプトに移動して、次のコマンドを記述する必要があります。

php artisan serve

このコマンドを実行した後、ブラウザでhttp://localhost:8000/file-import を開きます。

1.50 GEEK