タイトル: CSVのアップロードおよび読み込み(maatwebsite/excel)
SEOタイトル: CSVのアップロードおよび読み込み(maatwebsite/excel)
この本文には実行可能なタグ等が含まれるため、安全のためHTMLソースとして表示しています。本文データは変更していません。
<table border="1" cellpadding="1" cellspacing="1" style="width:1000px">
<thead>
<tr><th style="background-color:#f39c12;color:#ffffff;text-align:left">この記事の要点</th></tr>
</thead>
<tbody>
<tr>
<td style="background-color:#fef9e7">
<ul>
<li>Laravel <code>maatwebsite/excel</code> パッケージでの<strong>CSV アップロード・読み込み</strong></li>
<li>導入: <code>composer require maatwebsite/excel</code></li>
<li><strong>2.x 系</strong>: <code>Excel::load($file)->get()</code></li>
<li><strong>3.x 系</strong>: Import クラスを作って <code>Excel::import(new MyImport, $file)</code></li>
</ul>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>本稿は<strong>Laravelの「maatwebsite/excel」パッケージを使用したCSVファイルの読み込み方法</strong>を説明します。</p>
<p> </p>
<h2>maatwebsite/excelの導入</h2>
<p>以下のコマンドを実行します。</p>
<table border="1" cellpadding="1" cellspacing="1" style="width:1000px">
<tbody>
<tr>
<td style="background-color:#000000">
<p><span style="color:#ffffff">composer require "maatwebsite/excel:~2.1.0"</span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="color:#e74c3c">※2018/5/5現在、バージョン3にはインポート機能が無いのでバージョン2にしましょう。</span></p>
<p> </p>
<h2>プロバイダー登録</h2>
<p>「<strong>config/app.php</strong>」にプロバイダーとして追加登録します。</p>
<table border="1" cellpadding="1" cellspacing="1" style="width:1000px">
<tbody>
<tr>
<td style="background-color:#000000">
<p><span style="color:#ffffff">'providers' => [</span></p>
<p style="margin-left:40px"><span style="color:#f1c40f">Maatwebsite\Excel\ExcelServiceProvider::class,</span></p>
<p><span style="color:#ffffff">]</span></p>
<p><span style="color:#ffffff">...</span></p>
<p><span style="color:#ffffff">'aliases' => [</span></p>
<p style="margin-left:40px"><span style="color:#f1c40f">'Excel' => Maatwebsite\Excel\Facades\Excel::class,</span></p>
<p><span style="color:#ffffff">]</span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<h2>CSVの読み込み</h2>
<p>以下はブラウザからCSVのアップロードを想定した実装例です。</p>
<p> </p>
<p><strong>【クライアント側】</strong></p>
<table border="1" cellpadding="1" cellspacing="1" style="width:1000px">
<tbody>
<tr>
<td style="background-color:#000000">
<p><span style="color:#ffffff"><form method="POST" action="{{ url('...') }}" </span><span style="color:#f1c40f">enctype="multipart/form-data"</span><span style="color:#ffffff">><br />
<input type="file" name="csv"><br />
<button type="submit">Submit</button><br />
</form></span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p><strong>【サーバー側】</strong></p>
<table border="1" cellpadding="1" cellspacing="1" style="width:1000px">
<tbody>
<tr>
<td style="background-color:#000000">
<p><span style="color:#f1c40f">use Excel;</span></p>
<p><span style="color:#ffffff">...</span></p>
<p><span style="color:#ffffff">class CsvController extends Controller</span></p>
<p style="margin-left:40px"><span style="color:#ffffff">public function readCsv(Request $request) {</span></p>
<p style="margin-left:40px"> </p>
<p style="margin-left:40px"><span style="color:#ffffff"> $file = $request->file('file');</span></p>
<p style="margin-left:40px"><span style="color:#ffffff"> $loadedFile = </span><span style="color:#f1c40f">Excel::load</span><span style="color:#ffffff">(<br />
$file->getRealPath()<br />
,function($reader){}<br />
)->get();</span></p>
<p style="margin-left:40px"><span style="color:#ffffff"> $rows = $loadedFile->toArray();</span></p>
<p style="margin-left:40px"><span style="color:#ffffff"> foreach ($rows as $row){<br />
\Log::info('row: ' . var_export($row, true));<br />
} </span><br />
<span style="color:#ffffff">...</span></p>
<p style="margin-left:40px"><span style="color:#ffffff">}</span></p>
<p><span style="color:#ffffff">}</span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>【出力結果】</p>
<table border="1" cellpadding="1" cellspacing="1" style="width:1000px">
<tbody>
<tr>
<td style="background-color:#000000">
<p><span style="color:#ffffff">[2018-05-05 10:47:41] local.INFO: row: array (<br />
'header1' => 'val1-1',<br />
'header2' => 'val1-2',<br />
)<br />
[2018-05-05 10:47:41] local.INFO: row: array (<br />
'header1' => 'val2-1',<br />
'header2' => 'val2-2',<br />
)</span></p>
</td>
</tr>
</tbody>
</table>
<p> </p>