Spout のおかげで、Laravel の Excel インポート/エクスポートが高速になります。以下のベンチマークを参照してください。
Composer 経由でインストールします。
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 と組み合わせて使用することもできます。次の行を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 は、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
問題を回避するために行を 1 つずつエクスポートします。
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 でテストしました。 10000 行、ランダム データを含む 20 列、10 回の反復の XLSX エクスポートのテスト、2018 年 4 月 5 日。ベンチマークを信用しないでください。
平均メモリピーク使用量 | 実行時間 | |
---|---|---|
ララベルエクセル | 123.56メートル | 11.56秒 |
ファストエクセル | 209万 | 2.76秒 |
それでも、Laravel Excel には他にも多くの機能があることを覚えておいてください。