LaravelにExcelを簡単にインポートする方法【maatwebsite】

Laravelと連携:Excel・PDF・Google

Laravelでエクセル機能を使うには、maatwebsiteが超おすすめ。

エクセルのインポート・エクスポートがとても手軽にできます。

今回はインストール方法とインストール方法、そしてバリデーションの付け方を解説していきますね。

じゅんこ
じゅんこ

続編記事ではエクスポート方法を解説します。

maatwebsite のインストール・設定

まずはインストールから進めていきましょう。

今回テストで使った環境はLaravel8ですが、Laravel6でも動作確認済みです。

① maatwebsite/excelをインストール

下記コマンドでパッケージをインストールします。

② configファイルに記述

app/configの中のapp.phpを開き、Providersの項目に下記を入力。

さらにAliasの項目に下記を入れてください。

③ 設定ファイルを作成

maatwebsite/excel用の設定ファイルを作成します。


app/configの中にexcel.phpファイルが出来ています。

ほぼデフォルトのままでOKですが、日本語のヘッダを利用したい場合は、111行目の ‘heading_row’の ‘formatter’ を ‘none’ にしておきましょう。

【変更前】

【変更後】

以上でインストール完了です。

Excelファイルのインポート

それではまずは、Excelファイルをインポートしてみましょう。

下記のようなファイルをインポートするとします。

それでは、まずはインポートした情報を格納するデータベースから作っていきましょう。

① データベースの作成

下記コマンドで、モデルとマイグレーションファイルを作成します。

app/Modelsの中にDango.phpモデルファイルができます。

データベーステーブルに値を入れられるよう、ファイルの中に、次の1行を加えます。

またdatabase/migrations の中にできるマイグレーションファイルには、次のように入力しておきましょう。

マイグレーションを実行します。

データベースにお団子テーブルができました。

② ルート設定

表示用のルート設定と、読み込み用のルート設定を作っておきます。

③ ビューファイルの作成

resources/viewsの中にdango.blade.php を作成します。

次のように入れておきます。

④ インポート設定ファイルの作成

次に下記コマンドでインポート用のファイルを作成します。

app/Imports に DangoImport.phpファイルが作成されます。

⑤ ヘッダ用の設定

・DangoImport.phpを開き、先頭に下記のuse宣言を加えておきます。

class名のあとにも【WithHeadingRow】と加えておきましょう。

・また一番上のモデル名は、Laravel7までの書き方になっています。

Laravel8~ご利用の場合は、app\Models\モデル名 と変更してくださいね。

・さらにmodelメソッドの中を次のルールで編集していきます。

    public function model(array $row)
{
return new モデル名([
データベースのカラム名‘=> $row[‘エクセルのカラム名‘],
]);
}
今回は、下記のようにいれておきます。

編集後のファイルは下記のとおり。黄色で囲んだ部分が追加した箇所です。

じゅんこ
じゅんこ

なおヘッダは入れない場合には、WithHeadingRowは不要です。

$row[0] など、カラムの番号を入れてください。

④ コントローラーの設定

最後にコントローラーの設定です。

下記コマンドで団子用コントローラーを作成。

app\Controllersの中にDangoController.phpファイルが出来ます。

DangoController.phpファイルを開き、一番上に、下記のuse宣言を入れておきましょう。

表示用とインポート用のメソッドを追加します。

ページ表示用はこちら。

インポート用はこちら。

⑤ テスト

以上で準備完了。テストしてみましょう。

サーバーを起動し、/dangoを開くと、下記の画面が表示されます。

【ファイルを選択】でローカル上からエクセルファイルを選択し、【ボタンをクリック】

無事にインポートできれば、データベーステーブルの中にデータが入っています。

Excelファイルインポート前にバリデーションを入れる

エクセルファイルのインポートの際、バリデーションを加えることも可能です。

① バリデーションルールの追加

app/Importsの中のDangoImport.phpを開きます。

一番上に次のuse宣言を加えてください。

class名のあとにも、WithValidation を追加します。

rulesメソッドにバリデーションルールを入れていきます。

書き方は次のとおり。

    public function rules(): array
{
return [
データベースのカラム名‘ => ‘バリデーションルール‘,
];
}

たとえば、dateカラムの入力を必須にするのであれば次のように入れます。

オリジナルのエラーメッセージを表示したい場合は、バリデーションルールの下に、customValidationMessagesメソッドを追加します。

インポートファイルは次のようになります。

② エラー表示箇所の追加

またresources/viewsの中のdango.blade.phpファイルにエラーメッセージが表示される場所を作っておきます。

これで、バリデーションにひっかかった場合にはエラーメッセージが出てきます。

さいごに

以上で完了!
うまくいかない場合や、変な値がデータベースの中に入る場合、エクセルファイル上で右クリックして、セルの書式をチェックしてみてくだいね。

また重複防止や日時エラー対策など、関連記事に色々掲載しております。

困ったときには、併せて参考にしてみてください。

コメント

タイトルとURLをコピーしました