LoginSignup
5
6

More than 3 years have passed since last update.

【Laravel Excel】読み込んだファイルを編集して出力する方法

Last updated at Posted at 2019-12-06

はじめに

業務で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に助けられました

ほかにもセルごとに色を変えたりフォントやフォーマットの指定もできます。

雛形ファイルを使うとレイアウトの指定も楽なのでおすすめです。
参考にしていただければ幸いです。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6