DEV Community

kkumar-gcc
kkumar-gcc

Posted on

How to Import and Export Excel and CSV Files in Laravel 9

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 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 package. You can install it using composer:

composer require maatwebsite/excel
Enter fullscreen mode Exit fullscreen mode

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.

php artisan make:model Product
Enter fullscreen mode Exit fullscreen mode

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:

php artisan make:migration create_products_table
Enter fullscreen mode Exit fullscreen mode

If you would like to generate a database migration 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:

public function up()
{
    Schema::create('products', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->text('description');
        $table->double('price');
        $table->timestamps();
    });
}
Enter fullscreen mode Exit fullscreen mode

Finally, run the following command to apply the migration:

php artisan migrate
Enter fullscreen mode Exit fullscreen mode

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:

php artisan make:controller ProductController
Enter fullscreen mode Exit fullscreen mode

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:

//...
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.');
    }
}
Enter fullscreen mode Exit fullscreen mode

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.

php artisan make:import ProductsImport --model=Product
Enter fullscreen mode Exit fullscreen mode

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.

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],
        ]);
    }
}
Enter fullscreen mode Exit fullscreen mode

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:

//....
class ProductController extends Controller
{
    //...
    public function export()
    {
        return Excel::download(new ProductsExport, 'products.xlsx');
    }
}
Enter fullscreen mode Exit fullscreen mode

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:

php artisan make:export ProductsExport --model=Product
Enter fullscreen mode Exit fullscreen mode

This command will create a new export class in the app/Exports directory. Open this file and add the following code:

use Maatwebsite\Excel\Concerns\FromCollection;
use App\Product;
class ProductsExport implements FromCollection
{
    public function collection()
    {
        return Product::all();
    }
}
Enter fullscreen mode Exit fullscreen mode

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:

Route::get('/import', [ProductController::class,"index"]);
Route::post('/import', [ProductController::class,"import"]);
Route::get('/export', [ProductController::class,"export"]);
Enter fullscreen mode Exit fullscreen mode

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.

<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>
Enter fullscreen mode Exit fullscreen mode

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!

Top comments (0)