How to Import and Export Excel and CSV Files in Laravel 9
Tags: laravel, programming, php, tutorial
Published: 2023-02-08 10:54:56

Laravel 9 is a popular PHP framework that makes it easy to build robust and scalable web applications. One of the important features of any web application is the ability to import and export data in different formats. This can be particularly useful when you need to transfer data from one system to another, or when you need to store data for later use. In this tutorial, we’ll look at how to import and export Excel and CSV files in Laravel 9 using the `Maatwebsite\Excel` package.

The [Maatwebsite\Excel](https://laravel-excel.com/) package is a popular package that makes it easy to work with Excel and CSV files in Laravel. It provides a simple API that you can use to import and export data with just a few lines of code. This package also supports multiple file formats, so you can choose the format that works best for your needs.

### Step 1: Install the Package

To get started, you need to install the [Maatwebsite\Excel](https://laravel-excel.com/) package. You can install it using composer:
```bash
composer require maatwebsite/excel
```

### Step 2: Create a Model

In this step, you need to create a model that represents the data you want to import and export. For example, if you want to import and export products, you can create a `Product` model.
```bash
php artisan make:model Product
```

### Step 3: Create a Migration

Next, you need to create a migration that creates the `products` table in your database. You can use the following command to create a migration:
```bash
php artisan make:migration create_products_table
```
>If you would like to generate a [database migration](https://laravel.com/docs/9.x/migrations) when you generate the model, you may use the `--migration` or `-m` option in step 2

Then, open the created migration file and add the following code:
```php
public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->text('description');
        $table->double('price');
        $table->timestamps();
    });
}
```
Finally, run the following command to apply the migration:
```bash
php artisan migrate
```
### Step 4: Create a Controller

Now, you need to create a controller that will handle the import and export operations. You can create a controller using the following command:
```bash
php artisan make:controller ProductController
```

### Step 5: Import Data

In this step, you’ll add the code that imports the data from the Excel or CSV file into the `products` table in your database. Open the `ProductController` file and add the following code:
```php
//...
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use App\Models\Product;

class ProductController extends Controller
{
    public function index()
    {
        return view('import');
    }
    //...
    public function import(Request $request)
    {
        $file = $request->file('file');
        Excel::import(new ProductsImport, $file);
        return back()->with('success', 'Products imported successfully.');
    }
}
```
In this code, you first retrieve the uploaded file from the request object. Then, you import data to `ProductsImport` using the `import` method of the `Excel` façade. This class extends the `Maatwebsite\Excel\Concerns\ToModel` interface, which provides the necessary methods for importing data from an Excel or CSV file into a database table.
```bash
php artisan make:import ProductsImport --model=Product
```
This will create a new file named `ProductsImport.php` in the `app/Imports` directory. The `--model=Product` option specifies the name of the model class that will be used to store the imported data.
```php
use Maatwebsite\Excel\Concerns\ToModel;
use Illuminate\Support\Facades\Hash;
use App\Models\Product;

class ProductsImport implements ToModel
{
    public function model(array $row)
    {
        return new Product([
            'name' => $row[0],
            'description' => $row[1],
            'price' => $row[2],
        ]);
    }
}
```
This code implements the `ProductsImport` class and implements the `model` method, which takes an array of data for each row as an argument and returns a new `Product` model instance populated with the data from that row.

### Step 6: Export Data

In this step, you’ll add the code that exports the data from the `products` table in your database to an Excel or CSV file. Open the `ProductController` file and add the following code:
```php
//....
class ProductController extends Controller
{
    //...
    public function export()
    {
        return Excel::download(new ProductsExport, 'products.xlsx');
    }
}
```
In this code, you use the `download` method of the `Excel` facade to download the data from the `ProductsExport` class. The `ProductsExport` class is responsible for preparing the data that needs to be exported. To create this class, you can use the following command:
```bash
php artisan make:export ProductsExport --model=Product
```
This command will create a new export class in the `app/Exports` directory. Open this file and add the following code:
```php
use Maatwebsite\Excel\Concerns\FromCollection;
use App\Product;
class ProductsExport implements FromCollection
{
    public function collection()
    {
        return Product::all();
    }
}
```
In this code, you implement the `FromCollection` interface, which requires you to implement the `collection` method. In this method, you return the collection of `all` products using the all method of the `Product` model.

### Step 7: Add Routes

Finally, you need to add routes for the import and export operations. Open the `routes/web.php` file and add the following code:
```php
Route::get('/import', [ProductController::class,"index"]);
Route::post('/import', [ProductController::class,"import"]);
Route::get('/export', [ProductController::class,"export"]);
```
In this code, you add two routes for the import operation, one for the GET request and one for the POST request. The GET request is used to display the form for uploading the file, and the POST request is used to handle the file upload and import the data. You also add a route for the export operation, which returns the Excel or CSV file with the data.

### Step 8: Create the View

Finally, you need to create a view that will have the form to import the file and a button to export the data.
```php
<form action="{{ url('/import') }}" method="post" enctype="multipart/form-data">
    @csrf
    <input type="file" name="file">
    <button type="submit">Import</button>
</form>

<a href="{{ url('/export') }}">Export</a>
```
That’s it! You now have a complete Laravel 9 application that can import and export Excel and CSV files. You can customize this code as per your requirements. You can add validation to the imported data, and you can also add a confirmation message before exporting the data.

Conclusion

In this tutorial, you learned how to import and export Excel and CSV files in Laravel 9 using the `Maatwebsite\Excel` package. This package provides a simple and easy-to-use API that makes it possible to import and export data with just a few lines of code. You can use this package to handle data transfer between different systems or to store data for later use. With the help of this package, you can simplify your data import and export process and improve the efficiency of your web application.I hope this tutorial helps you in your Laravel projects.Happy coding!