Excel et CSV Importer et exporter des fichiers avec Laravel

Excel et CSV Importer et exporter des fichiers avec Laravel

Comment importer et exporter des fichiers Excel et CSV dans une application Laravel .

Nous utiliserons le package maatwebsite/excel pour les tâches d’importation et d’exportation. Dans cet exemple, nous allons créer un formulaire simple permettant de télécharger un fichier CSV et de créer plusieurs utilisateurs. Ensuite, nous créerons une route d’exportation qui téléchargera tous les utilisateurs de la base de données dans un fichier Excel.

Suivez les étapes ci-dessous pour créer la fonction d’importation et d’exportation dans une application Laravel 11. Vous pourrez exporter des fichiers avec des extensions .csv, .xls, et .xlsx.

Étapes pour l’importation et l’exportation de fichiers CSV avec Laravel 11

Installer Laravel 11
Installer le package maatwebsite/excel
Créer des enregistrements fictifs
Créer une classe d’importation
Créer une classe d’exportation
Créer un contrôleur
Créer des routes
Créer un fichier Blade

Étape 1 : Installer Laravel 11

composer create-project laravel/laravel example-app

Étape 2 : Installer le package maatwebsite/excel

Installez le package à l’aide de la commande suivante :

composer require maatwebsite/excel

Étape 3 : Créer des enregistrements fictifs

Ajoutez des enregistrements fictifs à la table users pour tester l’exportation. Utilisez la commande suivante :

php artisan tinker
  
User::factory()->count(10)->create()

Étape 4 : Créer une classe d’importation

Créez une classe d’importation avec la commande suivante :

php artisan make:import UsersImport --model=User

Ajoutez la logique d’importation dans cette classe pour valider et insérer les données des utilisateurs.

// app/Imports/UsersImport.php


<?php
  
namespace App\Imports;
  
use App\Models\User;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithValidation;
use Hash;
  
class UsersImport implements ToModel, WithHeadingRow, WithValidation
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new User([
            'name'     => $row['name'],
            'email'    => $row['email'], 
            'password' => Hash::make($row['password']),
        ]);
    }
  
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function rules(): array
    {
        return [
            'name' => 'required',
            'password' => 'required|min:5',
            'email' => 'required|email|unique:users'
        ];
    }
}

Étape 5 : Créer une classe d’exportation

Créez une classe d’exportation avec la commande suivante :

php artisan make:export UsersExport --model=User

Ajoutez la logique d’exportation dans cette classe pour récupérer les données de la table users.

app/Exports/UsersExport.php

<?php
  
namespace App\Exports;
    
use App\Models\User;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
    
class UsersExport implements FromCollection, WithHeadings
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        return User::select("id", "name", "email")->get();
    }
    
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function headings(): array
    {
        return ["ID", "Name", "Email"];
    }
}

Étape 6 : Créer un contrôleur

Créez un contrôleur nommé UserController avec les méthodes index(), export(), et import(). Utilisez la commande suivante :

php artisan make:controller UserController

Ajoutez les méthodes nécessaires pour gérer l’importation et l’exportation.

// app/Http/Controllers/UserController.php


<?php
    
namespace App\Http\Controllers;
    
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\UsersExport;
use App\Imports\UsersImport;
use App\Models\User;
    
class UserController extends Controller
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function index()
    {
        $users = User::get();
  
        return view('users', compact('users'));
    }
          
    /**
    * @return \Illuminate\Support\Collection
    */
    public function export() 
    {
        return Excel::download(new UsersExport, 'users.xlsx');
    }
         
    /**
    * @return \Illuminate\Support\Collection
    */
    public function import(Request $request) 
    {
        // Validate incoming request data
        $request->validate([
            'file' => 'required|max:2048',
        ]);
  
        Excel::import(new UsersImport, $request->file('file'));
                 
        return back()->with('success', 'Users imported successfully.');
    }
}

Étape 7 : Créer des routes

Ajoutez des routes dans le fichier routes/web.php pour afficher la liste des utilisateurs, importer des fichiers, et exporter des fichiers.

// routes/web.php


<?php
  
use Illuminate\Support\Facades\Route;
  
use App\Http\Controllers\UserController;
  
Route::get('users', [UserController::class, 'index']);
Route::get('users-export', [UserController::class, 'export'])->name('users.export');
Route::post('users-import', [UserController::class, 'import'])->name('users.import');

Étape 8 : Créer un fichier Blade

Créez un fichier nommé users.blade.php dans le dossier resources/views. Ce fichier contiendra un formulaire pour l’importation de fichiers ainsi qu’une table affichant les utilisateurs et une option pour exporter les données.

// resources/views/users.blade.php


<!DOCTYPE html>
<html>
<head>
    <title>Laravel 11 Import Export Excel to Database Example - ItSolutionStuff.com</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" />
</head>
<body>
      
<div class="container">
    <div class="card mt-5">
        <h3 class="card-header p-3"><i class="fa fa-star"></i> Laravel 11 Import Export Excel to Database Example - ItSolutionStuff.com</h3>
        <div class="card-body">
  
            @session('success')
                <div class="alert alert-success" role="alert"> 
                    {{ $value }}
                </div>
            @endsession
  
            @if ($errors->any())
                <div class="alert alert-danger">
                    <strong>Whoops!</strong> There were some problems with your input.<br><br>
                    <ul>
                        @foreach ($errors->all() as $error)
                            <li>{{ $error }}</li>
                        @endforeach
                    </ul>
                </div>
            @endif
  
            <form action="{{ route('users.import') }}" method="POST" enctype="multipart/form-data">
                @csrf
  
                <input type="file" name="file" class="form-control">




                <br>
                <button class="btn btn-success"><i class="fa fa-file"></i> Import User Data</button>
            </form>
    
            <table class="table table-bordered mt-3">
                <tr>
                    <th colspan="3">
                        List Of Users
                        <a class="btn btn-warning float-end" href="{{ route('users.export') }}"><i class="fa fa-download"></i> Export User Data</a>
                    </th>
                </tr>
                <tr>
                    <th>ID</th>
                    <th>Name</th>
                    <th>Email</th>
                </tr>
                @foreach($users as $user)
                <tr>
                    <td>{{ $user->id }}</td>
                    <td>{{ $user->name }}</td>
                    <td>{{ $user->email }}</td>
                </tr>
                @endforeach
            </table>
    
        </div>
    </div>
</div>
       
</body>
</html>

Une fois toutes les étapes nécessaires terminées, lancez l’application Laravel avec la commande suivante :

php artisan serve

Ensuite, ouvrez votre navigateur web, entrez l’URL suivante et visualisez le résultat de l’application :

http://localhost:8000/users

Vous pourrez importer des utilisateurs via un fichier CSV et exporter les utilisateurs existants au format Excel.

par