Un tutoriel sur l’utilisation du package rap2hpoutre/fast-excel pour exporter des données d’une collection ou d’un modèle au format Excel xlsx, ods ou csv et d'importer les données d’une feuille de calcul dans un projet Laravel.
Fast Excel ou fast-excel est un package Laravel qui permet de lire et d'écrire des fichiers de tableur (CSV, XLSX et ODS). Il offre les fonctionnalités suivantes :
Une collection (Illuminate\Support\Collection
) dans un projet Laravel, est un wrapper qui fournit des méthodes pour manipuler efficacement des tableaux de données.
Ce guide vous montrera comment installer et utiliser Fast Excel ou rap2hpoutre/fast-excel pour effectuer les opérations ci-dessus. Au moment de la rédaction de cet article, j'utilise la version 9.42.2 de Laravel.
La version anglaise de ce tutoriel : Laravel : import and export a collection in Excel with Fast Excel
Pour installer le package rap2hpoutre/fast-excel dans un projet Laravel, exécutez la commande composer
suivante :
composer require rap2hpoutre/fast-excel
Cette commande téléchargera fast-excel et ses dépendances dans le répertoire /vendor
de votre projet Laravel.
Le package rap2hpoutre/fast-excel utilise la bibliothèque box/spout pour lire et écrire des fichiers de tableur.
Une fois fast-excel téléchargé dans votre projet, vous pouvez l'initialiser directement dans un contrôleur et accéder aux méthodes de la classe Rap2hpoutre\FastExcel\FastExcel
:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Rap2hpoutre\FastExcel\FastExcel; // La classe FastExcel
class FastExcelController extends Controller
{
public function index () {
$data = collect(); // Une collection ou un modèle
$fastexcel = new FastExcel($data); // L'instance Fast Excel
dd($fastexcel);
}
}
FastExcel fournit également l’helper global fastexcel()
qui permet un accès direct a ses méthodes n'importe où dans votre projet :
// ...
$data = collect(); // Une collection ou un modèle
$fastexcel = fastexcel($data); // L'instance Fast Excel
// ...
Si l'importation de la classe Rap2hpoutre\FastExcel\FastExcel
ou l'utilisation de l'helper global fastexcel()
ne vous convient pas, vous pouvez également enregistrer la façade "FastExcel" dans le tableau $aliases
de votre fichier /config/app.php
:
'aliases' => Facade::defaultAliases()->merge([
"FastExcel" => Rap2hpoutre\FastExcel\Facades\FastExcel::class
])->toArray()
Ensuite, initialisez Fast Excel en transmettant des données à la méthode data($data)
, où $data
représente une collection ou un modèle :
// Une collection ou un modèle
$data = User::first();
// L'instance Fast Excel
$fastexcel = \FastExcel::data($data);
La méthode export($fichier)
de FastExcel, où $fichier
représente le nom du fichier suivi de l'extension ".xlsx", ".ods" ou ".csv" permet d'exporter les données d'une collection ou d'un modèle vers le répertoire /public
:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class FastExcelController extends Controller
{
public function index () {
// Une collection de "App\Models\User";
$users = User::all();
// Exportation vers le fichier "/public/users.xlsx"
$chemin = (fastexcel($users))->export("users.xlsx");
// Exportation vers le fichier "/public/users.csv"
// $chemin = (fastexcel($users))->export("users.csv");
// Exportation vers le fichier "/public/users.ods"
// $chemin = (fastexcel($users))->export("users.ods");
}
}
Dans cet exemple, $chemin
contient le chemin absolu du fichier users.xlsx
créé. Exemple : C:\laragon\www\laravel-fastexcel\public\users.xlsx
Si vous souhaitez sélectionner les colonnes à exporter, réorganiser les données ou leur appliquer un traitement, vous pouvez utiliser un callback après le nom de fichier dans la méthode export()
:
// Callback "function($user) { ... }" dans export()
$chemin = (fastexcel($users))->export("users.xlsx", function ($user) {
return [
"Nom" => ucfirst($user['name']),
"Adresse email" => $user['email']
];
});
Au lieu d'utiliser la méthode export($fichier)
pour enregistrer les fichiers .xlsx, .csv ou .ods dans le répertoire /public
, vous pouvez utiliser la méthode download($fichier)
pour lancer le téléchargement :
// Collection "App\Models\User";
$users = User::select('id', 'name', 'email')->get();
// Téléchargement du fichier "users.xlsx"
return fastexcel($users)->download('users.xlsx');
Fast Excel vous permet d'exporter plusieurs collections ou modèles vers différentes feuilles de calcul dans un classeur Excel à l'aide de la classe SheetCollection
(Collection de feuilles de calcul).
Regardons un exemple qui exporte les données des modèles User
, Post
et Product
vers le fichier users-posts-products.xlsx
:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
// Importation de SheetCollection
use Rap2hpoutre\FastExcel\SheetCollection;
use App\Models\Post;
use App\Models\Product;
use App\Models\User;
class FastExcelController extends Controller
{
public function index () {
// Collection "App\Models\User";
$users = User::select('id', 'name', 'email')->get();
// Collection "App\Models\Post"
$posts = Post::orderBy("created_at")->get();
// Collection "App\Models\Product"
$products = Product::select('id', "name", "description")->get();
// Collection des feuilles de calcul (SheetCollection)
$sheets = new SheetCollection([
"Utilisateurs" => $users,
"Publications" => $posts,
"Produits" => $products
]);
// Exportation des feuilles de calcul vers "/public/users-posts-products.xlsx"
$chemin = (fastexcel($sheets))->export("users-posts-products.xlsx");
}
}
Si vous ouvrez le fichier users-posts-products.xlsx
dans Microsoft Excel, vous trouverez les feuilles de calcul "Utilisateurs", "Publications" et "Produits" :
Si vous avez une collection qui exporte une grande quantité de données, 1M+ lignes par exemple, vous pouvez utiliser une fonction génératrice pour éviter le problème memory_limit
:
use App\Models\Client;
// Fonction génératrice "clients()"
function clients () {
foreach (Client::cursor() as $client) {
yield $client;
}
};
// Exportation vers "users-clients.xlsx"
fastexcel(iterator_to_array(clients()))->export("users-clients.xlsx");
Vous pouvez utiliser la méthode import($fichier)
de FastExcel, où $fichier
représente le chemin d'un fichier .xlsx ou .csv, pour importer les entrées (lignes) de $fichier
dans une collection (Illuminate\Support\Collection
) :
// Importation du fichier "/public/users.xlsx"
$data = fastexcel()->import("users.xlsx");
// $data contient une collection
dd($data);
FastExcel vous permet de parcourir les lignes d'un fichier et de les insérer dans la base de données à l'aide d'un callback après le nom du fichier dans la méthode import()
:
use App\Models\Client;
// Callback "function ($ligne) { ... }" dans "import"
$data = fastexcel()->import("clients.xlsx", function ($ligne) {
return Client::create([
'name' => $ligne['name'],
'email' => $ligne['email'],
'phone' => $ligne['phone'],
'address' => $ligne['address'],
]);
});
$ligne['name']
spécifie la colonne intitulée "name" dans le fichier clients.xlsx
.
La méthode importSheets($fichier)
de FastExcel importe les entrées de feuille de calcul (lignes) de $fichier
dans une collection (Illuminate\Support\Collection
) :
// Importation du fichier "/public/users-posts-products.xlsx"
$data = fastexcel()->importSheets("users-posts-products.xlsx");
// $data contient une collection de 3 tableaux
dd($data);
Pour importer une feuille de calcul spécifique, vous pouvez spécifier son numéro ou sa position dans le classeur à l'aide de la méthode sheet($numero)
:
// Importation de la 2e feuille de calcul du fichier "/public/users-posts-products.xlsx"
$data = fastexcel()->sheet(2)->import("users-posts-products.xlsx");
Nous venons de voir comment utiliser le package Fast Excel pour exporter des données d'une collection ou d'un modèle vers un fichier Excel au format .xlsx, .csv ou .ods, et importer des données à partir d'une feuille de calcul en tant que collection.
La documentation de Fast Excel montre également comment appliquer des styles (couleur du texte, police, arrière-plan, ...) aux colonnes et aux lignes d'une feuille de calcul.
Résumons les méthodes fast-excel vues :
fastexcel($data)
: l'helper global de FastExcel permet de l'initialiser avec les données $data
d'une collection ou d'un modèleimport($fichier)
: importer les lignes d'un fichier $fichier
.xlsx, .csv ou .ods dans la collectionexport($fichier)
: exporter les données d'une collection ou d'un modèle vers un fichier $fichier
.xlsx, .csv ou .odsimportSheets($fichier)
: importer les feuilles de calcul depuis $fichier
sheet($numero)
: importer une feuille de calcul spécifique $numero
download($fichier)
: lancer le téléchargement du fichier $fichier
N'hésitez pas à partager votre expérience avec Fast Excel dans les commentaires. Portez-vous bien ! 😊
Cette publication vous a plu ?
Partagez-la avec vos ami(e)s sur les réseaux sociaux.
Wilo Ahadi, l'auteur
Passionné de l'informatique, je suis spécialiste en techniques des systèmes et réseaux, développeur web et mobile, infographiste et designer, ... J'aime partager mon expérience en formant sur la plateforme Akili School
Voir profil
Commentaires