Post Details

How to Import and Export an Excel File in Laravel
03 Feb

How to Import and Export an Excel File in Laravel

Hi Guys,

In this tutorial will learn How to Import and Export an Excel File in Laravel I will tell you the best way to Import and Export an Excel File in Laravel. If you want to see an example of import and export Excel files in Laravel then you are in the right place at the right time.

For importing and exporting Excel files, we will use maatwebsite/excel composer package. in this tutorial, We will create a simple form for input where we can upload a CSV file and create multiple users. Then we will create an export route so we can download all users from the database in Excel (.csv, .xls, and .xlsx) files.

so, let's follow the below steps to create the import and export function in the Laravel application. you can export files with .csv, .xls, and .xlsx files.

We will complete this tutorial in the below steps:

  • Step 1: InstallLaravel
  • Step 2: Install maatwebsite/excel Package
  • Step 3: Create Dummy Records
  • Step 4: Create Import Class
  • Step 5: Create Export Class
  • Step 6: Create Controller
  • Step 7: Create Routes
  • Step 8: Create Blade File
  • Run Laravel App

 

Step 1: InstallLaravel

composer create-project laravel/laravel example-app

Step 2: Install maatwebsite/excel Package

In this step, we will install maatwebsite/excel package via the Composer package manager.

composer require maatwebsite/excel

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

Step 3: Create Dummy Records

In this step, we will create some dummy data records for the user's table, so we can export them with those users. so let's run below tinker command:

php artisan tinker

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

Step 4: Create Import Class

In this step, we will create an import class. So you have to run the following command and change the following code on that file:

php artisan make:import UsersImport --model=User

app/Imports/UsersImport.php

<?php
  
namespace App\Imports;
  
use App\Models\User;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Hash;
  
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']),
        ]);
    }
}

Step 5: Create Export Class

In this step, we will create an export class. So you have to run the following command and change the following code on that file:

php artisan make:export UsersExport --model=User

app/Exports/UsersExport.php

<?php
  
namespace App\Exports;
  
use App\Models\User;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
  
class UsersExport implements FromCollection, WithHeadings
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        return User::select("id", "name", "email")->get();
    }
  
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function headings(): array
    {
        return ["ID", "Name", "Email"];
    }
}

Step 6: Create Controller

In this step, we will create a UserController with index(), export(), and import() methods. so first let's create a controller by following the command and updating the code on it.

php artisan make:controller UserController

Now, update the code on the UserController file.

app/Http/Controllers/UserController.php

<?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 UserController extends Controller
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function index()
    {
        $users = User::get();
  
        return view('users', compact('users'));
    }
        
    /**
    * @return \Illuminate\Support\Collection
    */
    public function export() 
    {
        return Excel::download(new UsersExport, 'users.xlsx');
    }
       
    /**
    * @return \Illuminate\Support\Collection
    */
    public function import() 
    {
        Excel::import(new UsersImport,request()->file('file'));
               
        return back();
    }
}

Step 7: Create Routes

In this step, we will create routes for a list of users, import users, and export users.

routes/web.php

<?php
  
use Illuminate\Support\Facades\Route;
  
use App\Http\Controllers\UserController;
  
/*
|--------------------------------------------------------------------------
| 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::controller(UserController::class)->group(function(){
    Route::get('users', 'index');
    Route::get('users-export', 'export')->name('users.export');
    Route::post('users-import', 'import')->name('users.import');
});

Step 8: Create Blade File

In the Last step, let's create users.blade.php(resources/views/users.blade.php) for layout and we will write design code here and put the following code:

resources/views/users.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>How to Import Excel File in Laravel - Om Coding Tutorial</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
     
<div class="container">
    <div class="card bg-light mt-3">
        <div class="card-header">
            How to Import Excel File in Laravel - Om Coding Tutorial
        </div>
        <div class="card-body">
            <form action="{{ route('users.import') }}" method="POST" enctype="multipart/form-data">
                @csrf
                <input type="file" name="file" class="form-control">
                <br>
                <button class="btn btn-success">Import User Data</button>
            </form>
  
            <table class="table table-bordered mt-3">
                <tr>
                    <th colspan="3">
                        List Of Users
                        <a class="btn btn-warning float-end" href="{{ route('users.export') }}">Export User Data</a>
                    </th>
                </tr>
                <tr>
                    <th>ID</th>
                    <th>Name</th>
                    <th>Email</th>
                </tr>
                @foreach($users as $user)
                <tr>
                    <td>{{ $user->id }}</td>
                    <td>{{ $user->name }}</td>
                    <td>{{ $user->email }}</td>
                </tr>
                @endforeach
            </table>
  
        </div>
    </div>
</div>
     
</body>
</html>

Now we have done all these steps, we have to type the below command and hit enter to run the Laravel app:

php artisan serve

Now, Go to your web browser, type the given URL, and view the app output

http://localhost:8000/users

I hope it can help you guys...

0 Comments

Leave a Comment