Laravel フレームワークでExcelファイルの読み込み、書き出しが簡単にできるプラグイン「fast-excel」の紹介です。
エクセルやCSVからデータのインポート、確認用にデータを書き出したりなど。業務系のプロジェクトに携わってきた人は、そのような機能を実装した経験があるのではないでしょうか。
CSVのインポート、エクスポートは そこまで難しい事ではありませんが、Excelファイルや OpenOffice用の ' ods
'となると、少し話が変わってきます。
そんなスプリットシートの扱いが簡単に出来る Laravelフレームワーク用のプラグインが「fast-excel」です。
- Laravelフレームワークで Excel用の ' xlsx
' , ' CSV
', OpenOffice用の ' ods
'を含めたスプリットシートの読み込み、書き込みが簡単に出来るようになります
fast-excel のインストールは プロジェクトルート上から ' composer
' コマンドを使って導入します。
# composerコマンドを使って fast-excelのインストール
composer require rap2hpoutre/fast-excel
また、サポートされている Laravelのバージョンは、執筆時点で Laravel 5.3 ~ 5.7 なので プロジェクトが、どのバージョンの Laravelを使っているか注意が必要です。
データのエクスポート
Excelファイル、CSVなど スプリットシートへデータを書き込む場合は ' export
' メソッドを使います。export メソッドを使うと指定の場所 ( 'public
' フォルダ内 ) にファイルが保存されます。
また、直接生成したファイルをダウンロードさせたい場合は ' download
'メソッドを使います。
一つ注意する店が、スプリットシートへ書き込み元になるデータは ' collection 形式
' である必要があります。
use Rap2hpoutre\FastExcel\FastExcel; // ライブラリの読み込み
// 元になるデータ
$list = collect([
[ 'id' => 1, 'name' => 'エレン' ],
[ 'id' => 2, 'name' => 'ミカサ' ],
[ 'id' => 3, 'name' => 'リヴァイ' ],
]);
// fast-excelをインスタンス化、書き込むデータを読み込み
$excel = new FastExcel($list);
// $listをエクセルファイルにエクスポート
$excel->export('users.xlsx');
// 直接ダウンロードさせたい場合
$excel->download('users.xlsx');
// PHP 7.0 以上だと、このような書き方も可能です
// (new FastExcel($list))->export('users.xlsx');
// モデルから読み込む場合
/**
(new FastExcel(User::all()))->export('users.csv', function ($user) {
return [
'Id' => $user->id,
'Name' => $user->name,
];
});
/*

複数のシート名に分けてデータを書き込む場合は ' SheetCollection
' クラスを使用し、クラス内で指定した配列の key名がシート名になります。
下記のスニペットではExcelファイルで発行していますが、OpenOfficeの ' .ods
' でも問題なく動作します。
use Rap2hpoutre\FastExcel\FastExcel;
use Rap2hpoutre\FastExcel\SheetCollection;
// シート1に入れるデータ
$list1 = collect([
[ 'id' => 1, 'name' => 'エレン' ],
[ 'id' => 2, 'name' => 'ミカサ' ],
[ 'id' => 3, 'name' => 'リヴァイ' ],
]);
// シート2に入れるデータ
$list2 = collect([
[ 'id' => 1, 'name' => 'アルミン' ],
[ 'id' => 2, 'name' => 'クリスタ' ],
[ 'id' => 3, 'name' => 'ユミル' ],
]);
$sheet = new SheetCollection([
'シート1' => $list1, // keyがシート名に
'シート2' => $list2
]);
// シートをダウンロードさせる
(new FastExcel($sheet))->download('sheet.xlsx');

スプリットシートファイルの インポート
ExcelやCSV, OpenOffice の ' ods
' ファイルからデータを読み込む時は ' importSheets
' メソッドを使うだけで、簡単に取得できます。
もし、スプリットシートファイルに複数のシートが複数ある場合でも、特殊なオプションをつける事なくダイレクトにデータを読み込む事が可能です。
( * 複数のシートからデータを読み込む場合、key名は配列の数値に置き換わります )
use Rap2hpoutre\FastExcel\FastExcel; // ライブラリの読み込み
/* テスト用にエクセルファイルを作成 */
$list = collect([
[ 'id' => 1, 'name' => 'エレン' ],
[ 'id' => 2, 'name' => 'ミカサ' ],
[ 'id' => 3, 'name' => 'リヴァイ' ],
]);
// エクセルファイルを作成
(new FastExcel($list))->export('data.xlsx');
// エクセルファイルを読み込み
$result = (new FastExcel)->importSheets('data.xlsx');
dd($result); // データ確認用にダンプ
他ライブラリで、LaravelフレームワークでExcelを操作するプラグインに ' Larvel Excel ' が挙げられますが、fast-excel は機能が絞られている分、軽快に動作するよう設計されているそうです。
エクセルやCSVファイルからのデータの一括読み込み機能や、確認用のデータエクスポート機能が必要な時に fast-excelを使用すると、簡単克つ短時間で実装できそうです。
GitHub : rap2hpoutre/fast-excel