Быстрый импорт/экспорт Excel для Laravel благодаря Spout. См. тесты ниже.
Установить через композитор:
composer require rap2hpoutre/fast-excel
Экспортируйте модель в файл .xlsx
:
use Rap2hpoutre FastExcel FastExcel ;
use App User ;
// Load users
$ users = User:: all ();
// Export all users
( new FastExcel ( $ users ))-> export ( ' file.xlsx ' );
Экспортируйте модель или коллекцию :
$ list = collect ([
[ ' id ' => 1 , ' name ' => ' Jane ' ],
[ ' id ' => 2 , ' name ' => ' John ' ],
]);
( new FastExcel ( $ list ))-> export ( ' file.xlsx ' );
Экспортируйте xlsx
, ods
и csv
:
$ invoices = App Invoice:: orderBy ( ' created_at ' , ' DESC ' )-> get ();
( new FastExcel ( $ invoices ))-> export ( ' invoices.csv ' );
Экспортируйте только некоторые атрибуты, определяющие имена столбцов:
( new FastExcel (User:: all ()))-> export ( ' users.csv ' , function ( $ user ) {
return [
' Email ' => $ user -> email ,
' First Name ' => $ user -> firstname ,
' Last Name ' => strtoupper ( $ user -> lastname ),
];
});
Скачать (из метода контроллера):
return ( new FastExcel (User:: all ()))-> download ( ' file.xlsx ' );
import
возвращает коллекцию:
$ collection = ( new FastExcel )-> import ( ' file.xlsx ' );
Импортируйте csv
с определенным разделителем, символами вложения и кодировкой «gbk»:
$ collection = ( new FastExcel )-> configureCsv ( ' ; ' , ' # ' , ' gbk ' )-> import ( ' file.csv ' );
Импортировать и вставить в базу данных:
$ users = ( new FastExcel )-> import ( ' file.xlsx ' , function ( $ line ) {
return User:: create ([
' name ' => $ line [ ' Name ' ],
' email ' => $ line [ ' Email ' ]
]);
});
Вы можете использовать FastExcel с дополнительным фасадом. Добавьте следующую строку в config/app.php
под ключом aliases
.
' FastExcel ' => Rap2hpoutre FastExcel Facades FastExcel::class,
Используя Фасад, у вас не будет доступа к конструктору. Вы можете установить данные экспорта, используя метод data
.
$ list = collect ([
[ ' id ' => 1 , ' name ' => ' Jane ' ],
[ ' id ' => 2 , ' name ' => ' John ' ],
]);
FastExcel:: data ( $ list )-> export ( ' file.xlsx ' );
FastExcel предоставляет удобный глобальный помощник для быстрого создания экземпляра класса FastExcel в любом месте приложения Laravel.
$ collection = fastexcel ()-> import ( ' file.xlsx ' );
fastexcel ( $ collection )-> export ( ' file.xlsx ' );
Экспортируйте несколько листов, создав SheetCollection
:
$ sheets = new SheetCollection ([
User:: all (),
Project:: all ()
]);
( new FastExcel ( $ sheets ))-> export ( ' file.xlsx ' );
Используйте индекс, чтобы указать имя листа:
$ sheets = new SheetCollection ([
' Users ' => User:: all (),
' Second sheet ' => Project:: all ()
]);
Импортируйте несколько листов с помощью importSheets
:
$ sheets = ( new FastExcel )-> importSheets ( ' file.xlsx ' );
Вы также можете импортировать конкретный лист по его номеру:
$ users = ( new FastExcel )-> sheet ( 3 )-> import ( ' file.xlsx ' );
Импортируйте несколько листов с именами листов:
$ sheets = ( new FastExcel )-> withSheetsNames ()-> importSheets ( ' file.xlsx ' );
Экспортируйте строки одну за другой, чтобы избежать проблем memory_limit
используя 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 ' );
Добавьте стиль заголовка и строк с помощью методов headerStyle
и 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 задуман как Spout в стиле Laravel: простая, но элегантная оболочка Spout с целью упростить импорт и экспорт . Его можно рассматривать как более быструю (и экономичную) альтернативу Laravel Excel с меньшим количеством функций. Используйте его только для простых задач.
Протестировано на MacBook Pro 2015 г., 2,7 ГГц, Intel Core i5 16 Go, 1867 МГц, DDR3. Тестирование экспорта XLSX для 10 000 строк, 20 столбцов со случайными данными, 10 итераций, 5 апреля 2018 г. Не доверяйте эталонам.
Среднее пиковое использование памяти | Время выполнения | |
---|---|---|
Ларавел Эксель | 123,56 М | 11,56 с |
ФастЭксель | 2,09 М | 2,76 с |
Тем не менее, помните, что Laravel Excel имеет гораздо больше возможностей.