Import/export Excel rapide pour Laravel, grâce à Spout. Voir les repères ci-dessous.
Installer via composer :
composer require rap2hpoutre/fast-excel
Exportez un modèle vers un fichier .xlsx
:
use Rap2hpoutre FastExcel FastExcel ;
use App User ;
// Load users
$ users = User:: all ();
// Export all users
( new FastExcel ( $ users ))-> export ( ' file.xlsx ' );
Exporter un Modèle ou une Collection :
$ list = collect ([
[ ' id ' => 1 , ' name ' => ' Jane ' ],
[ ' id ' => 2 , ' name ' => ' John ' ],
]);
( new FastExcel ( $ list ))-> export ( ' file.xlsx ' );
Exporter xlsx
, ods
et csv
:
$ invoices = App Invoice:: orderBy ( ' created_at ' , ' DESC ' )-> get ();
( new FastExcel ( $ invoices ))-> export ( ' invoices.csv ' );
Exportez uniquement certains attributs spécifiant les noms de colonnes :
( new FastExcel (User:: all ()))-> export ( ' users.csv ' , function ( $ user ) {
return [
' Email ' => $ user -> email ,
' First Name ' => $ user -> firstname ,
' Last Name ' => strtoupper ( $ user -> lastname ),
];
});
Télécharger (à partir d'une méthode de contrôleur) :
return ( new FastExcel (User:: all ()))-> download ( ' file.xlsx ' );
import
renvoie une collection :
$ collection = ( new FastExcel )-> import ( ' file.xlsx ' );
Importez un csv
avec un délimiteur spécifique, des caractères de clôture et un encodage "gbk":
$ collection = ( new FastExcel )-> configureCsv ( ' ; ' , ' # ' , ' gbk ' )-> import ( ' file.csv ' );
Importer et insérer dans la base de données :
$ users = ( new FastExcel )-> import ( ' file.xlsx ' , function ( $ line ) {
return User:: create ([
' name ' => $ line [ ' Name ' ],
' email ' => $ line [ ' Email ' ]
]);
});
Vous pouvez utiliser FastExcel avec la façade facultative. Ajoutez la ligne suivante à config/app.php
sous la clé aliases
.
' FastExcel ' => Rap2hpoutre FastExcel Facades FastExcel::class,
En utilisant la Façade, vous n'aurez pas accès au constructeur. Vous pouvez définir vos données d'exportation en utilisant la méthode data
.
$ list = collect ([
[ ' id ' => 1 , ' name ' => ' Jane ' ],
[ ' id ' => 2 , ' name ' => ' John ' ],
]);
FastExcel:: data ( $ list )-> export ( ' file.xlsx ' );
FastExcel fournit une aide globale pratique pour instancier rapidement la classe FastExcel n'importe où dans une application Laravel.
$ collection = fastexcel ()-> import ( ' file.xlsx ' );
fastexcel ( $ collection )-> export ( ' file.xlsx ' );
Exportez plusieurs feuilles en créant un SheetCollection
:
$ sheets = new SheetCollection ([
User:: all (),
Project:: all ()
]);
( new FastExcel ( $ sheets ))-> export ( ' file.xlsx ' );
Utilisez index pour spécifier le nom de la feuille :
$ sheets = new SheetCollection ([
' Users ' => User:: all (),
' Second sheet ' => Project:: all ()
]);
Importez plusieurs feuilles à l'aide importSheets
:
$ sheets = ( new FastExcel )-> importSheets ( ' file.xlsx ' );
Vous pouvez également importer une feuille spécifique par son numéro :
$ users = ( new FastExcel )-> sheet ( 3 )-> import ( ' file.xlsx ' );
Importez plusieurs feuilles avec des noms de feuilles :
$ sheets = ( new FastExcel )-> withSheetsNames ()-> importSheets ( ' file.xlsx ' );
Exportez les lignes une par une pour éviter les problèmes memory_limit
en utilisant yield
:
function usersGenerator () {
foreach (User:: cursor () as $ user ) {
yield $ user ;
}
}
// Export consumes only a few MB, even with 10M+ rows.
( new FastExcel ( usersGenerator ()))-> export ( ' test.xlsx ' );
Ajoutez un style d’en-tête et de lignes avec les méthodes headerStyle
et rowsStyle
.
use OpenSpout Common Entity Style Style ;
$ header_style = ( new Style ())-> setFontBold ();
$ rows_style = ( new Style ())
-> setFontSize ( 15 )
-> setShouldWrapText ()
-> setBackgroundColor ( " EDEDED " );
return ( new FastExcel ( $ list ))
-> headerStyle ( $ header_style )
-> rowsStyle ( $ rows_style )
-> download ( ' file.xlsx ' );
FastExcel est destiné à être Spout à la saveur de Laravel : un wrapper simple mais élégant autour de Spout dans le but de simplifier les importations et les exportations . Il pourrait être considéré comme une alternative plus rapide (et respectueuse de la mémoire) à Laravel Excel, avec moins de fonctionnalités. Utilisez-le uniquement pour des tâches simples.
Testé sur un MacBook Pro 2015 2,7 GHz Intel Core i5 16 Go 1867 MHz DDR3. Test d'un export XLSX pour 10 000 lignes, 20 colonnes avec données aléatoires, 10 itérations, 05/04/2018. Ne vous fiez pas aux benchmarks.
Utilisation maximale moyenne de la mémoire | Temps d'exécution | |
---|---|---|
Laravel Excel | 123,56 millions | 11,56 s |
RapideExcel | 2,09 millions | 2,76 s |
N'oubliez pas que Laravel Excel possède bien plus de fonctionnalités.