How to Import Export Excel and CSV File in Laravel 8 Application

Throughout this tutorial, you will learn how to easily import and export Excel and CSV file in Laravel 8 application while communicating with the PHP MySQL database using Maatwebsite/Laravel-Excel package.

The Maatwebsite/Laravel-Excel is a rugged and reliable package for supercharging Excel exports and imports in Laravel 8, this robust package is developed by a Dutch company known as Maatwebsite, and they are the regular contributor to Laravel ecosystem.

If you are a novice developer and looking for a solution to import-export data to CSV or excel file format in Laravel 8 application, In that case, this tutorial will certainly help you find the answer for Laravel 8 import export to CSV or Excel example. Here are the step you will go through in this tutorial.

Set up Laravel Environment

In general, to run the PHP commands or even interact with Laravel, you need to set up Composer on your development machine. After downloading and setting up composer follow the below process.

Enter composer command on console and hit enter to install a new Laravel application:

composer create-project laravel/laravel laravel-import-export-excel-csv --prefer-dist

Get into the project:

cd laravel-import-export-excel-csv

Add Database Details

The learning paradigm of this tutorial also explains Laravel 8 Import Export Excel and CSV File to MySQL database. So you need to make the connection between Laravel and MySQL by adding the database name, username and password in .env file.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db
DB_USERNAME=root
DB_PASSWORD=

Install Maatwebsite/Laravel-Excel Package

You need to run the below command to install Maatwebsite/Laravel-Excel package in Laravel:

composer require maatwebsite/excel

After the package installation, open config/app.php file and inject Laravel excel plugin in providers and aliases array simultaneously:

'providers' => [
  .......
  .......
  Maatwebsite\Excel\ExcelServiceProvider::class,
 
 ],  

'aliases' => [ 
  .......
  .......
  'Excel' => Maatwebsite\Excel\Facades\Excel::class,

], 

With the help of the vendor publish command easily publish the config and propel it inside the config/excel.php:

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"

Now, you can see a newly generated config file in config/excel.php.

Create Records in Database

You need some records in the database to export and import to CSV/Excel format, so use the migrate command to migrate the User table which comes default with Laravel.

php artisan migrate

Run command to enter into Psy PHP Shell:

php artisan tinker

Run command to create the dummy records, and yes you can check them inside the database:

User::factory()->count(60)->create();

Create Maatwebsite Import Export Classes

Create import and export class specifically for maatwebsite package, and later you will have to use both the classes in the controller file.

php artisan make:import UsersImport --model=User

Go ahead and include the below code in app/Imports/UsersImport.php file:

<?php

namespace App\Imports;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class UsersImport implements ToModel
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new User([
            'name'     => $row[0],
            'email'    => $row[1],
            'password' => Hash::make($row[2])
        ]);
    }
}

Also, enter command in console and hit enter to generate UsersExport class:

php artisan make:export UsersExport --model=User

You can check following file has been generated in app/Exports/UsersExport.php path:

<?php

namespace App\Exports;

use App\Models\User;
use Maatwebsite\Excel\Concerns\FromCollection;

class UsersExport implements FromCollection
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        return User::all();
    }
}

Generate and Getting Ready Controller

To create the functionality of importing and exporting excel and csv file in Laravel, you have to generate a new controller and write logic within the controller

Below command generates the ImportExportController.

php artisan make:controller ImportExportController

We created three functions, the importExport() method contains the view method which initializes the view in laravel app, whereas importFile() and exportFile() processes import and export features respectively.

Add the following code in the app/Http/Controllers/ImportExportController.php.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Maatwebsite\Excel\Facades\Excel;
use App\Exports\UsersExport;
use App\Imports\UsersImport;

class ImportExportController extends Controller
{

    public function importExport()
    {
       return view('welcome');
    }
   
    public function importFile(Request $request) 
    {
        Excel::import(new UsersImport, $request->file('file')->store('temp'));
        return back();
    }

    public function exportFile() 
    {
        return Excel::download(new UsersExport, 'users-list.xlsx');
    }  
}

Define Route

You need to create three routes to manage displaying view, import and export excel and csv file:

Insert the following code in routes/web.php file:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ImportExportController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('import-export', [ImportExportController::class, 'importExport']);
Route::post('import-file', [ImportExportController::class, 'importFile'])->name('import-file');
Route::get('export-file', [ImportExportController::class, 'exportFile'])->name('export-file');

Create Blade View

Now, finally, you have to create a view which rewards our intense hard work, for the Laravel 8 export to excel demo go to resources/views/welcome.blade.php file and replace with the below code.

<!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 8 Import and Export Excel & CSV Demo </title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
</head>

<body>
    <div class="container mt-5 text-center">
        <form action="{{ route('import-file') }}" method="POST" enctype="multipart/form-data">
            @csrf
            <div class="form-group mb-5" style="max-width: 600px; margin: 0 auto;">
                <div class="custom-file text-left">
                    <input type="file" name="file" class="custom-file-input" id="customFile">
                    <label class="custom-file-label" for="customFile">Browse file</label>
                </div>
            </div>
            <button class="btn btn-danger">Click to Import</button>
            <a class="btn btn-primary" href="{{ route('export-file') }}">Click to Export</a>
        </form>
    </div>
</body>

</html>

Start Laravel Application

And, now we are done with coding just start the app and test:

php artisan serve

Here is the endpoint that you can finally test:

http://localhost:8000/import-export

Now, you can easily export and import the Users records from database in .xlsx format:

The Laravel Import and Export into Excel tutorial is over, i hope you have liked this tutorial.

Download the code: https://github.com/remotestack377/LaravelImportExportExcel