Laravel ExcelでPHPExcelを利用するには

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

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

Laravel Excelのセットアップ

composer.jsonのrequireにパッケージを追加
[text title=”composer.json” hightlight=”3″]
"require": {
"laravel/framework": "4.2.*",
"maatwebsite/excel": "1.*"
},
[/text]
Composerを更新する
[bash gutter=”false”]
$ php composer.phar update
[/bash]
or
[bash gutter=”false”]
$ composer update
[/bash]

providersとaliasに設定を追加
[php title=”app/config/app.php” highlight=”6,17″]
‘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’,

),
[/php]

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

アップロードフォームの表示
[php title=”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>
[/php]
サブミットされたExcelを読み込んで表示
[php title=”app/routes.php”]
Route::get(‘form’, function(){
return View::make(‘form’);
});
[/php]

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

Excel::loadには、getReadPathで取得したパスを渡します。
loadで返されるLaravelExcelReaderはPHPExcelクラスのオブジェクトを委譲しているので、PHPExcelのメソッドをそのまま呼び出せます(参照: Docs For Class PHPExcel)。
[php title=”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’);
});
[/php]

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