Laravel ExcelでPHPExcelを利用するには


PHPExcelをLaravelで利用する場合はサービスプロバイダー Laravel Excel が使えます。

HP: http://www.maatwebsite.nl/laravel-excel/
Github: https://github.com/Maatwebsite/Laravel-Excel

Laravel Excelのセットアップ

composer.jsonのrequireにパッケージを追加

// composer.json
    "require": {
        "laravel/framework": "4.2.*",
        "maatwebsite/excel": "1.*"
    },

Composerを更新する

$ php composer.phar update

or

$ composer update


providersとaliasに設定を追加

// app/config/app.php
    'providers' => array(

        ...
        'Illuminate\View\ViewServiceProvider',
        'Illuminate\Workbench\WorkbenchServiceProvider',
        'Maatwebsite\Excel\ExcelServiceProvider',

    ),

    ...

    'aliases' => array(

        ...
        'Validator'       => 'Illuminate\Support\Facades\Validator',
        'View'            => 'Illuminate\Support\Facades\View',
        'Excel' => 'Maatwebsite\Excel\Facades\Excel',

    ),

サンプルアプリケーション
Excelをアップロードして内容を表示するサンプルを作成してみます。

アップロードフォームの表示

// app/views/form.blade.php
<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>
   Laravel
  </title>
 </head>
 <body>
  {{ Form::open(array('url'=>'form-submit','files'=>true)) }}

  {{ Form::label('file','File',array('id'=>'','class'=>'')) }}
  {{ Form::file('file','',array('id'=>'','class'=>'')) }}
  <br/>
  <!-- submit buttons -->
  {{ Form::submit('Save') }}

  <!-- reset buttons -->
  {{ Form::reset('Reset') }}

  {{ Form::close() }}
 </body>
</html>

サブミットされたExcelを読み込んで表示

// app/routes.php
Route::get('form', function(){
 return View::make('form');
});

アップロードしたExcelの各セルを出力する処理をroutes.phpに直接書いています。

Excel::loadには、getReadPathで取得したパスを渡します。
loadで返されるLaravelExcelReaderはPHPExcelクラスのオブジェクトを委譲しているので、PHPExcelのメソッドをそのまま呼び出せます(参照: Docs For Class PHPExcel)。

// app/routes.php
Route::any('form-submit', function(){
    $excel = App::make('excel');
    $contents = "";
    $reader = Excel::load(Input::file('file')->getRealPath());
    // Getting all results
    $reader->setActiveSheetIndex(0);
    foreach ($reader->getActiveSheet()->getRowIterator() as $row) {
        foreach ($row->getCellIterator() as $cell) {
            if (!is_null($cell)) {
                $contents .= $cell->getValue() . ", ";
            }
        }
        $contents .= '<br>';
    }
    return Response::make($contents, 200)->header('Content-Type', 'text/html; charset=UTF-8');
});

参考: How To Create File Upload With Laravel | Clivern

,