LaravelでエクセルやCSVを扱う時に便利なプラグイン「fast-excel」



Laravel フレームワークでExcelファイルの読み込み、書き出しが簡単にできるプラグイン「fast-excel」の紹介です。

 エクセルやCSVからデータのインポート、確認用にデータを書き出したりなど。業務系のプロジェクトに携わってきた人は、そのような機能を実装した経験があるのではないでしょうか。

CSVのインポート、エクスポートは そこまで難しい事ではありませんが、Excelファイルや OpenOffice用の ' ods 'となると、少し話が変わってきます。

そんなスプリットシートの扱いが簡単に出来る Laravelフレームワーク用のプラグインが「fast-excel」です。

fast-excel で出来ること 

Laravelフレームワークで Excel用の ' xlsx ' , ' CSV ', OpenOffice用の ' ods 'を含めたスプリットシートの読み込み、書き込みが簡単に出来るようになります

fast-excel のインストール

fast-excel のインストールは プロジェクトルート上から ' composer ' コマンドを使って導入します。

# composerコマンドを使って fast-excelのインストール
composer require rap2hpoutre/fast-excel

また、サポートされている Laravelのバージョンは、執筆時点で Laravel 5.3 ~ 5.7 なので プロジェクトが、どのバージョンの Laravelを使っているか注意が必要です。
 

fast-excel の使い方

データのエクスポート

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,
    ];
});
/*

* 生成したデータ ( 画像はMacのNumbersで開いています ) 

複数のシート名に分けてデータを書き込む場合は ' SheetCollection ' クラスを使います。

 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); // データ確認用にダンプ


Summary

他ライブラリで、LaravelフレームワークでExcelを操作するプラグインに ' Larvel Excel ' が挙げられますが、fast-excel は機能が絞られている分、軽快に動作するよう設計されているそうです。

エクセルやCSVファイルからのデータの一括読み込み機能や、確認用のデータエクスポート機能が必要な時に fast-excelを使用すると、簡単克つ短時間で実装できそうです。

GitHub : rap2hpoutre/fast-excel

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ