Laravel 8 Import Export Excel & CSV File

Laravel 8 Import Export Excel & CSV File

Laravel 8 import export excel, csv file example; In this tutorial, you will learn step by step how to import and export excel & csv file to database in laravel 8 using maatwebsite/excel package.

Laravel maatwebsite/excel Features:

  • Easily export collections to Excel.
  • Export queries with automatic chunking for better performance.
  • Queue exports for better performance.
  • Easily export Blade views to Excel.
  • Easily import to collections.
  • Read the Excel file in chunks.
  • Handle the import inserts in batches.

Sometimes, you need to import export data into csv or excel format in laravel 8 app. So this tutorial will guide you step by step on import export excel csv file to database in laravel 8.

Import and Export CSV and Excel File in Laravel 8

  • Step 1 – Download Laravel 8 Application
  • Step 2 – Database Configuration
  • Step 3 – Install maatwebsite/excel Package
  • Step 4 – Configure maatwebsite/excel
  • Step 5 – Create Routes
  • Step 6 – Compose Import Export Class
  • Step 7 – Create ExcelCSV Controller By Artisan Command
  • Step 8 – Create Import Export Form
  • Step 9 – Run Development Server

Step 1 – Download Laravel 8 Application

First of all download or install laravel 8 new setup. So, open terminal and type the following command to install new laravel 8 app into your machine:

composer create-project --prefer-dist laravel/laravel ExcelCSVImportExport

Step 2 – Database Configuration

In step 2, open your downloaded laravel 8 app into any text editor. Then find .env file and configure database detail like the following:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db name
DB_USERNAME=db user name
DB_PASSWORD=db password

Step 3 – Install maatwebsite/excel Package

Installing maatwebsite/excel package using the following command:

composer require maatwebsite/excel

Step 4 – Configure maatwebsite/excel

Configure maatwebsite/excel package in the app.php file. Open the app.php file, which is established inside the config directory.

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

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

], 

Then publish the config of maatwebsite/excel package by using the following command:

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

Step 5 – Create Routes

Open web.php file from routes direcotry. And update the following routes into web.php file:

use App\Http\Controllers\ExcelCSVController;

Route::get('excel-csv-file', [ExcelCSVController::class, 'index']);
Route::post('import-excel-csv-file', [ExcelCSVController::class, 'importExcelCSV']);
Route::get('export-excel-csv-file/{slug}', [ExcelCSVController::class, 'exportExcelCSV']);

Step 6 – Compose Import Export Class

Create import and export excel csv class using the following commands:

For compose import class:

php artisan make:import UsersImport --model=User

Then update the following code into UsersImport.php class file, which is established at app/Imports directory:

<?php
   
namespace App\Imports;
   
use App\Models\User;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
    
class UsersImport implements ToModel, WithHeadingRow
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new User([
            'name'     => $row['name'],
            'email'    => $row['email'], 
            'password' => \Hash::make($row['password']),
        ]);
    }
}

For compose export class:

php artisan make:export UsersExport --model=User

Then update the following code into UsersImport.php class file, which is established at app/Exports directory:

<?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();
    }
}

Step 7 – Create ExcelCSV Controller By Artisan Command

Create ExcelCSV controller by using the following command:

php artisan make:controller ExcelCSVController

After that, go to app/http/controllers and open ExcelCSVController.php file. And update the following code into it:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Exports\UsersExport;

use App\Imports\UsersImport;

use Maatwebsite\Excel\Facades\Excel;

use App\Models\User;

class ExcelCSVController extends Controller
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function index()
    {
       return view('excel-csv-import');
    }
   
    /**
    * @return \Illuminate\Support\Collection
    */
    public function importExcelCSV(Request $request) 
    {
    	$validatedData = $request->validate([

           'file' => 'required',

        ]);

        Excel::import(new UsersImport,$request->file('file'));

           
        return redirect('excel-csv-file')->with('status', 'The file has been excel/csv imported to database in laravel 8');
    }

    /**
    * @return \Illuminate\Support\Collection
    */
    public function exportExcelCSV($slug) 
    {
        return Excel::download(new UsersExport, 'users.'.$slug);
    }
   
}

Step 8 – Create Blade File

Create blade view file for import export excel and csv file from database. So, Go to resources/views directory and create excel-csv-import.blade.php and update the following code into it:

<!DOCTYPE html>
<html>
<head>
  <title>Laravel 8 Import Export Excel and CSV File To Database Example Tutorial - Tutsmake.com</title>

  <meta name="csrf-token" content="{{ csrf_token() }}">

  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">

</head>
<body>

<div class="container mt-5">

  
  @if(session('status'))
    <div class="alert alert-success">
        {{ session('status') }}
    </div>
  @endif

  <div class="card">

    <div class="card-header font-weight-bold">
      <h2 class="float-left">Import Export Excel, CSV File In Laravel 8 - Tutsmake.com</h2>
      <h2 class="float-right"><a href="{{url('export-excel-csv-file/xlsx')}}" class="btn btn-success mr-1">Export Excel</a><a href="{{url('export-excel-csv-file/csv')}}" class="btn btn-success">Export CSV</a></h2>
    </div>

    <div class="card-body">

        <form id="excel-csv-import-form" method="POST"  action="{{ url('import-excel-csv-file') }}" accept-charset="utf-8" enctype="multipart/form-data">

          @csrf
                  
            <div class="row">

                <div class="col-md-12">
                    <div class="form-group">
                        <input type="file" name="file" placeholder="Choose file">
                    </div>
                    @error('file')
                        <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>
                    @enderror
                </div>              
 
                <div class="col-md-12">
                    <button type="submit" class="btn btn-primary" id="submit">Submit</button>
                </div>
            </div>     
        </form>

    </div>

  </div>

</div>  
</body>
</html>

Step 9 – Run Development Server

Execute the following command on command prompt to start the development server:

php artisan serve

Then open your browser and hit the following url on it:

http://127.0.0.1:8000/excel-csv-file

Recommended Laravel Posts

AuthorAdmin

My name is Devendra Dode. I am a full-stack developer, entrepreneur, and owner of Tutsmake.com. I like writing tutorials and tips that can help other developers. I share tutorials of PHP, Python, Javascript, JQuery, Laravel, Livewire, Codeigniter, Node JS, Express JS, Vue JS, Angular JS, React Js, MySQL, MongoDB, REST APIs, Windows, Xampp, Linux, Ubuntu, Amazon AWS, Composer, SEO, WordPress, SSL and Bootstrap from a starting stage. As well as demo example.

Leave a Reply

Your email address will not be published. Required fields are marked *