感謝 Spout,Laravel 的快速 Excel 匯入/匯出。請參閱下面的基準。
透過作曲家安裝:
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 ' );
匯入具有特定分隔符號、封裝字元和「gbk」編碼的csv
:
$ 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 與可選的 Facade 一起使用。將以下行加入到aliases
鍵下的config/app.php
中。
' FastExcel ' => Rap2hpoutre FastExcel Facades FastExcel::class,
使用 Facade,您將無法存取建構函數。您可以使用data
方法設定導出資料。
$ list = collect ([
[ ' id ' => 1 , ' name ' => ' Jane ' ],
[ ' id ' => 2 , ' name ' => ' John ' ],
]);
FastExcel:: data ( $ list )-> export ( ' file.xlsx ' );
FastExcel 提供了一個方便的全域幫助器,可以在 Laravel 應用程式中的任何位置快速實例化 FastExcel 類別。
$ 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 ' );
使用yield
逐一導出行以避免memory_limit
問題:
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 旨在成為 Laravel 風格的 Spout:一個簡單但優雅的 Spout 包裝器,其目標是簡化導入和導出。它可以被認為是 Laravel Excel 的更快(且記憶體友好)的替代品,但功能較少。僅將其用於簡單任務。
在 MacBook Pro 2015 2.7 GHz Intel Core i5 16 Go 1867 MHz DDR3 上進行測試。使用隨機資料測試 XLSX 匯出的 10000 行、20 列、10 次迭代,2018-04-05。不要相信基準。
平均記憶體峰值使用率 | 執行時間 | |
---|---|---|
Laravel Excel | 123.56M | 11.56秒 |
快速Excel | 209米 | 2.76秒 |
不過,請記住 Laravel Excel還有更多功能。