Laravel7 EXCELファイルを読み込んで表示する

Laravel7 EXCELファイルを読み込んで表示する

Laravel7でEXCELファイルを読み込んで表示するまでの簡単なサンプルコードを記述してます。ここではphpspreadsheetを利用してEXCELファイルを読み込みます。

環境

  • OS windows10 pro 64bit
  • Composer 1.10.5
  • PHP 7.4.5
  • Laravel Framework 7.6.2

EXCELファイル

下記のEXCELファイルを「storage\app」配下に用意してます。

bootstrap導入

UIに利用しているだけです。
詳しい手順はこちらに記述してますが、下記のコマンドで利用可能になります。

composer require laravel/ui
php artisan ui bootstrap
npm install && npm run dev

phpspreadsheet導入

下記のコマンドで導入します。

composer require phpoffice/phpspreadsheet

コントローラー作成

ファイルをアップロードするためのコントローラーを作成します。

php artisan make:controller ImportController

app\Http\Controllers\ImportControllerが作成されるので、下記の通りに編集します。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;

class ImportController extends Controller
{
    public function read() {

        $reader = new Xlsx();

        //EXCELファイル読み込み(PATHはEXCLEファイルがある場所を指定)
        $spreadsheet = $reader->load("C:\Apache24\htdocs\sample\storage\app\Book1.xlsx");
        // 第1引数 セルに値が無い時に値を指定
        // 第2引数 trueを指定するとセル内の計算結果を返して、falseなら計算式が表示される
        // 第3引数 各セルのフォーマットを利用するかしないか
        // 第4引数 trueだと、A1形式がキーになった配列。falseだと0から始まる数字がキーなった配列
        $sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, false, true);

        return view('import.read')->with('sheets', $sheetData);

    }
}

ルーティング追加

アクセスするURLを設定するため、ルーティングを記述します。

routes\web.phpに下記を追加します。

Route::get('import/read', 'ImportController@read');

ビュー作成

次にレイアウト部であるviewを作成します。

resources\views内で「import」というフォルダを作成して、フォルダ内に「read.blade.php」を下記の内容で、新たに作成します。

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>

        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">
        <!-- bootstrap -->
        <link href="{{ asset('css/app.css') }}" rel="stylesheet">
        
    </head>
    <body>
        <div class="vh-100 d-flex justify-content-center text-center">           

            <div class="content">
                <div>                     
                    <div class="row">                            
                        <table class="table">
                            <thead>
                                <tr>                                    
                                <th scope="col">A列</th>
                                <th scope="col">B列</th>
                                <th scope="col">C列</th>
                                </tr>
                            </thead>
                            <tbody>
                            @foreach($sheets as $sheet)
                            <tr>
                                <td>{{ $sheet['A'] }}</td>
                                <td>{{ $sheet['B'] }}</td>
                                <td>{{ $sheet['C'] }}</td>
                            </tr>
                            @endforeach
                            </tbody>
                        </table>                         
                    </div>                    
                </div>
            </div>
        </div>
    </body>
</html>

実行

実行します。

php artisan serve --host 0.0.0.0

ブラウザから http://プライベートIP:8000/import/show にアクセスするとEXCELファイルの内容が表示されていることが確認できます。