今回はLaravelのライブラリの一つLaravel Excelについて紹介したいと思います。
公式:http://www.maatwebsite.nl/laravel-excel/docs
GitHub:https://github.com/Maatwebsite/Laravel-Excel
Laravel ExcelはExcelファイルやCSVファイルを簡単にインポート、エクスポー トできるようになるライブラリです。また、LaravelのEloquentとの相性がとても良くできています。なおLGPLライセンスです。
それではLaravel Excelの導入方法と使い方について簡単に説明していきたいと思います。
(Laravel5を想定)
導入方法
まず始めにcomposer.jsonのrequire部分にパッケージを追加し composer update を実行します。これによりPHPOfficeのPHPExcelも同時にインストールされます。
1 |
"maatwebsite/excel": "~2.1.0" |
その後に、config/app.phpのproviders arrayの中に以下を追加。
1 |
'Maatwebsite\Excel\ExcelServiceProvider', |
また、aliasses arrayの中に以下を追加します。
1 |
'Excel' => 'Maatwebsite\Excel\Facades\Excel', |
これでLaravel Excelの使う準備はできました!
出力方法
ファイル名と出力形式
まずは基本形です。
1 2 3 4 5 |
Excel::create('Filename', function($excel) { // ファイルの中身を書き込む })->export("xlsx"); |
createメソッドの第一引数に出力するファイル名。そして ->export($ext) によって出力形式を指定します。出力形式は上記のxlsxの他、xls, csvやpdfを指定することができます。(pdfを使用する場合は、 "dompdf/dompdf": "~0.6.1" , "mpdf/mpdf": "~5.7.3" , "tecnick.com/tcpdf": "~6.0.0" のいずれかのライブラリが追加で必要。)
->export($ext) と ->download($ext) は同じ処理がされます。また代わりに ->store($ext) を使うことで、サーバーのapp/storage/exportsに保存する処理となります。storeメソッドは第二引数にpathを指定することで自由に保存場所を変更できます。
シートの操作
次にシートに関する情報の書き込み方を説明します。先程の基本形のファイルを書き込む部分に追加していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Excel::create('Filename', function($excel) { // 最初のシート $excel->sheet('first sheet', function($sheet) { // シートの中身について }); // 2番目のシート $excel->sheet('second sheet', function($sheet) { // }); })->export("xlsx"); |
sheetメソッドを使うことによってシートを作成でき、並べることによって複数のシートを作成可能です。第一引数にシート名を指定しています。
次にLaravelのEloquentを使って、実際シートにデータを入れてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
$books = Book::all(); Excel::create('Filename', function($excel) use ($books) { // 最初のシート $excel->sheet('first sheet', function($sheet) use ($books) { $sheet->fromArray($books); }); })->export("xlsx"); |
Bookというモデルがあったとして、fromArrayメソッドにそのモデルを渡すだけで、
1行目に$booksのキー名、2行目以降が$booksの値が入ったExcelファイルがダウンロード可能となります。
fromArrayメソッドでは、複数行を一気にデータを書き込むことできましたが、row, appndRowメソッドを使うことで一行ずつデータを書き込むこともできます。
1 2 3 4 5 6 7 |
// 1行目にデータを書き込み $sheet->row(1, array("test1", "test2")); // 追加でデータを書き込み(2行目~6行目) for($i=0; $i<5; $i++){ $sheet->appendRow(array($i, "test")); } |
以上がシートの操作となります。
セルの操作
シートの操作では主にデータの書き込みでしたが、セルの操作では書式設定(フォント、色、罫線)が行えます。以下が基本形となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// A1のセルを操作 $sheet->cell('A1', function($cell) { // 操作内容 }); // A1:A5の範囲をセル操作 $sheet->cells('A1:A5', function($cells) { // }); |
・フォントに関して
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// フォントの色を変更 $cells->setFontColor('#ffffff'); // フォントのスタイルを変更 $cells->setFontFamily('Calibri'); // フォントサイズ変更 $cells->setFontSize(16); // 太字に変更 $cells->setFontWeight('bold'); // 以下のようにまとめて指定することも可能 $cells->setFont(array( 'family' => 'Calibri', 'size' => '16', 'bold' => true )); |
・罫線
1 2 3 4 5 6 7 8 9 |
// 各方向の罫線情報をセット (上, 右, 下, 左) $cells->setBorder('solid', 'none', 'none', 'solid'); // 配列を使った指定方法もあります $cells->setBorder(array( 'top' => array( 'style' => 'solid' ), )); |
・水平方向・垂直方向の位置
1 2 3 4 5 |
// 水平方向の中央 $cells->setAlignment('center'); // 上下中央揃え $cells->setValignment('center'); |
セルサイズ
セルの幅や高さの指定はシートの操作の一部です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// A列の幅を指定 $sheet->setWidth('A', 5); // 配列を使うことで複数列を同時に指定 $sheet->setWidth(array( 'A' => 5, 'B' => 10 )); // 1行目の高さを指定 $sheet->setHeight(1, 50); // 配列を使い複数行指定 $sheet->setHeight(array( 1 => 50, 2 => 25 )); |
まとめ
上述したようにLaravel Excelを使うことでLaravelで扱っているデータを簡単・綺麗にエクセルファイルで出力することができます。紹介したメソッド以外にも”行の固定”や”セルの結合”等様々なことができるので、ぜひ利用してもらいたいです。また、出力以外に入力もできるので別の機会に紹介できたらと思います。