Help us understand the problem. What is going on with this article?

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

はじめに

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away