delete composer.lock (json) then run below command
composer require phpoffice/phpspreadsheet
composer require maatwebsite/excel
Hello,
I am going to show you an example of laravel 9 import export excel. This tutorial will give you a simple example of laravel 9 import export csv. We will look at an example of import export csv file in laravel 9. This article will give you a simple example of laravel 9 import file excel.
we will use maatwebsite/excel composer package for import and export tasks. in this example, i will create a simple form for input where you can upload a csv file and create multiple users. Then I will create an export route that will download all users from the database in an excel file.
so, let's follow the below step to create the import and export function in laravel 9 application. you can export file with .csv, .xls and .xlsx file.
Step 1: Install Laravel 9
This step is not required; however, if you have not created the laravel app, then you may go ahead and execute the below command:
In maatwebsite 3 version provide way to built import class and we have to use in controller. So it would be great way to create new Import class. So you have to run following command and change 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']), ]); }}
You can download demo csv file from here: Demo CSV File.
Step 5: Create Export Class
maatwebsite 3 version provide way to built export class and we have to use in controller. So it would be great way to create new Export class. So you have to run following command and change 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 UserController with index(), export() and import() method. so first let's create controller by following command and update code on it.
php artisan make:controller UserController
Now, update code on 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 need to create routes for list of users, import users and export users. so open your "routes/web.php" file and add following route.
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 Last step, let's create users.blade.php(resources/views/users.blade.php) for layout and we will write design code here and put following code: