#はじめに
業務でExcelファイルを出力する必要が出たため使用しました。
42列×1万行ほど出力する予定で、bladeテンプレートを使った場合と比較した結果、Excel雛形を用意したほうが速かったので今回はそちらを使用しました。
###環境
Laravel 5.2
Laravel Excel 2.1
php 7.0
#インストール
インストールについてはdocumentにLaravelバージョンごとの案内があるのでそれにしたがってください。
config/app.phpのServiceProviderとaliassesに追加しておくとuse Excel
で呼び出せて便利です。
composer update後にphp artisan config:cacheをしないと反映されないみたいなので忘れずに!
#やり方
//読み込み
Excel::load('file.xlsx', function($file) {
//シートの選択
$file->sheet('sheet1', function($sheet) {
$sheet->row(1, ['apple', '100']);
$sheet->row(2, ['banana', '30']);
$sheet->row(3, ['orange', '200']);
}
//出力形式の選択
})->export('xlsx')
まずExcel::loadで雛型ファイルを指定します。
※ver3以降はExcel::import($yourImport)に置き換えられているそうです。
雛形はstorageやresource配下に置くかと思いますが、Laravelのヘルパ関数で簡単にパスを取得できます。
シートの選択は、存在しないシート名を入れるとエラーになってしまうので、必要なシートは前もって作成しておく必要があります。
データの書き込みは、行ごとに$sheet->row()に行番号と配列を渡すことで実行できます。
$sheet->cell()を使えばセルごとの書き込みも可能です。
出力はexport()で、引数に出力形式を入れるだけです。読み込みファイルと出力形式を変えることもできます。
#便利なメソッド
$file->setFileName( Carbon::now()->format('Ym').'dataList');
取り込みと出力でファイル名を変えたい場合に便利です。
需要ありそうなのに何故かdocumentに載っていなかったので、、、
$sheet->getStyle('A1:K3')->applyFromArray([
'borders' => [ 'allborders' => [ 'style' => \PHPExcel_Style_Border::BORDER_THIN ] ]
]);
Excelに罫線を付けます。
documentだとsetAllBordersなどが紹介されていますが、使えなかったので、、、
こちらのissueに助けられました
ほかにもセルごとに色を変えたりフォントやフォーマットの指定もできます。
雛形ファイルを使うとレイアウトの指定も楽なのでおすすめです。
参考にしていただければ幸いです。