Importação/exportação rápida de Excel para Laravel, graças ao Spout. Veja os benchmarks abaixo.
Instale via compositor:
composer require rap2hpoutre/fast-excel
Exporte um modelo para um arquivo .xlsx
:
use Rap2hpoutre FastExcel FastExcel ;
use App User ;
// Load users
$ users = User:: all ();
// Export all users
( new FastExcel ( $ users ))-> export ( ' file.xlsx ' );
Exportar um modelo ou coleção :
$ list = collect ([
[ ' id ' => 1 , ' name ' => ' Jane ' ],
[ ' id ' => 2 , ' name ' => ' John ' ],
]);
( new FastExcel ( $ list ))-> export ( ' file.xlsx ' );
Exporte xlsx
, ods
e csv
:
$ invoices = App Invoice:: orderBy ( ' created_at ' , ' DESC ' )-> get ();
( new FastExcel ( $ invoices ))-> export ( ' invoices.csv ' );
Exporte apenas alguns atributos que especificam nomes de colunas:
( new FastExcel (User:: all ()))-> export ( ' users.csv ' , function ( $ user ) {
return [
' Email ' => $ user -> email ,
' First Name ' => $ user -> firstname ,
' Last Name ' => strtoupper ( $ user -> lastname ),
];
});
Download (de um método de controlador):
return ( new FastExcel (User:: all ()))-> download ( ' file.xlsx ' );
import
retorna uma coleção:
$ collection = ( new FastExcel )-> import ( ' file.xlsx ' );
Importe um csv
com delimitador específico, caracteres de delimitação e codificação "gbk":
$ collection = ( new FastExcel )-> configureCsv ( ' ; ' , ' # ' , ' gbk ' )-> import ( ' file.csv ' );
Importe e insira no banco de dados:
$ users = ( new FastExcel )-> import ( ' file.xlsx ' , function ( $ line ) {
return User:: create ([
' name ' => $ line [ ' Name ' ],
' email ' => $ line [ ' Email ' ]
]);
});
Você pode usar FastExcel com o Façade opcional. Adicione a seguinte linha a config/app.php
na chave aliases
.
' FastExcel ' => Rap2hpoutre FastExcel Facades FastExcel::class,
Usando o Façade, você não terá acesso ao construtor. Você pode definir seus dados de exportação usando o método data
.
$ list = collect ([
[ ' id ' => 1 , ' name ' => ' Jane ' ],
[ ' id ' => 2 , ' name ' => ' John ' ],
]);
FastExcel:: data ( $ list )-> export ( ' file.xlsx ' );
FastExcel fornece um auxiliar global conveniente para instanciar rapidamente a classe FastExcel em qualquer lugar em um aplicativo Laravel.
$ collection = fastexcel ()-> import ( ' file.xlsx ' );
fastexcel ( $ collection )-> export ( ' file.xlsx ' );
Exporte várias planilhas criando um SheetCollection
:
$ sheets = new SheetCollection ([
User:: all (),
Project:: all ()
]);
( new FastExcel ( $ sheets ))-> export ( ' file.xlsx ' );
Use o índice para especificar o nome da planilha:
$ sheets = new SheetCollection ([
' Users ' => User:: all (),
' Second sheet ' => Project:: all ()
]);
Importe várias planilhas usando importSheets
:
$ sheets = ( new FastExcel )-> importSheets ( ' file.xlsx ' );
Você também pode importar uma planilha específica por seu número:
$ users = ( new FastExcel )-> sheet ( 3 )-> import ( ' file.xlsx ' );
Importe várias planilhas com nomes de planilhas:
$ sheets = ( new FastExcel )-> withSheetsNames ()-> importSheets ( ' file.xlsx ' );
Exporte as linhas uma por uma para evitar problemas memory_limit
usando 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 ' );
Adicione estilo de cabeçalho e linhas com os métodos headerStyle
e 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 ' );
O FastExcel pretende ser o Spout com sabor do Laravel: um invólucro simples, mas elegante, do Spout com o objetivo de simplificar importações e exportações . Pode ser considerado uma alternativa mais rápida (e com memória amigável) ao Laravel Excel, com menos recursos. Use-o apenas para tarefas simples.
Testado em um MacBook Pro 2015 Intel Core i5 de 2,7 GHz 16 Go 1867 MHz DDR3. Testando uma exportação XLSX para 10.000 linhas, 20 colunas com dados aleatórios, 10 iterações, 05/04/2018. Não confie em benchmarks.
Uso médio de pico de memória | Tempo de execução | |
---|---|---|
LaravelExcel | 123,56 milhões | 11,56s |
Rápido Excel | 2,09 milhões | 2,76s |
Ainda assim, lembre-se que o Laravel Excel possui muito mais recursos.