Laravel Excelの紹介(Laravel:Excelファイル入出力ライブラリ)

今回は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も同時にインストールされます。

"maatwebsite/excel": "~2.1.0"

その後に、config/app.phpのproviders arrayの中に以下を追加。

'Maatwebsite\Excel\ExcelServiceProvider',

また、aliasses arrayの中に以下を追加します。

'Excel' => 'Maatwebsite\Excel\Facades\Excel',

これでLaravel Excelの使う準備はできました!

出力方法

ファイル名と出力形式

まずは基本形です。

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を指定することで自由に保存場所を変更できます。

シートの操作

次にシートに関する情報の書き込み方を説明します。先程の基本形のファイルを書き込む部分に追加していきます。

Excel::create('Filename', function($excel) {

    // 最初のシート
    $excel->sheet('first sheet', function($sheet) {

        // シートの中身について

    });

    // 2番目のシート
    $excel->sheet('second sheet', function($sheet) {
        // 
    });

})->export("xlsx");

sheetメソッドを使うことによってシートを作成でき、並べることによって複数のシートを作成可能です。第一引数にシート名を指定しています。

次にLaravelのEloquentを使って、実際シートにデータを入れてみましょう。

$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行目にデータを書き込み
$sheet->row(1, array("test1", "test2"));

// 追加でデータを書き込み(2行目~6行目)
for($i=0; $i<5; $i++){
    $sheet->appendRow(array($i, "test"));
}

以上がシートの操作となります。

セルの操作

シートの操作では主にデータの書き込みでしたが、セルの操作では書式設定(フォント、色、罫線)が行えます。以下が基本形となります。

// A1のセルを操作
$sheet->cell('A1', function($cell) {

    // 操作内容

});

// A1:A5の範囲をセル操作
$sheet->cells('A1:A5', function($cells) {

    //

});

・フォントに関して

// フォントの色を変更
$cells->setFontColor('#ffffff');

// フォントのスタイルを変更
$cells->setFontFamily('Calibri');

// フォントサイズ変更
$cells->setFontSize(16);

// 太字に変更
$cells->setFontWeight('bold');

// 以下のようにまとめて指定することも可能
$cells->setFont(array(
    'family'     => 'Calibri',
    'size'       => '16',
    'bold'       =>  true
));

・罫線

// 各方向の罫線情報をセット (上, 右, 下, 左)
$cells->setBorder('solid', 'none', 'none', 'solid');

// 配列を使った指定方法もあります
$cells->setBorder(array(
    'top'   => array(
        'style' => 'solid'
    ),
));

・水平方向・垂直方向の位置

// 水平方向の中央
$cells->setAlignment('center');

// 上下中央揃え
$cells->setValignment('center');

セルサイズ

セルの幅や高さの指定はシートの操作の一部です。

// 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で扱っているデータを簡単・綺麗にエクセルファイルで出力することができます。紹介したメソッド以外にも”行の固定”や”セルの結合”等様々なことができるので、ぜひ利用してもらいたいです。また、出力以外に入力もできるので別の機会に紹介できたらと思います。