Generar Archivos de Excel con Laravel 8

A veces necesitamos esportar la información que tenemos en nuestra base de datos para generar reportes, informes, estadisticas en un formato de archivo excel, en Laravel 8 es muy sencillo de hacer.

Antes que nada instalar el complemento Laravel Excel en este enlace esta su documentación y la guia para su instalación via composer.

Abrimos nuestra consola de comandos y ejecutamos en la carpeta del proyecto el comando:

composer require maatwebsite/excel

Comenzarán a instalarse las dependencias pare despues poder usar la clase Excel.

Ya tendremos el Modelo Users en la carpeta App\Models\users.php, por lo que continuamos con la creacion de un archivo para la exportación que aparecerá en la carpeta App\Exports ejecutando el suguiente comando de Artisan:

php artisan make:export UsersExport 

Dentro del nuevo archivo UsersExport.php que se ha ceado implemetaramos las cabeceras para que el archivo excel resultante tenga mas sentido, habras de ajustar las cabeceras según obtengas los datos de la consulta a la tabla users mediante el ORM Eloquent. El archivo quedaría de la siguiente manera:

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

    public function headings(): array
    {
        return [
            'id',
            'rol',
            'Nombre',
            'Apellidos',
            'Email',
            'Avatar',
            'Email verificado',
            'creado',
            'Actualizado',
        ];
    }
}

Creamos nuestro controlador para esta acción, de nuevo hacemos uso de los comandos de artisan de Laravel

php artisan make:controller ExcelController

Despues de crearse el controlador lo unico que hemos de hacer es colocar este codigo:

<?php

namespace App\Http\Controllers;


use Maatwebsite\Excel\Facades\Excel;
use App\Exports\UsersExport;

class ExcelController extends Controller
{
    /**
     * Muestra la lista de usuarios registrados.
     *
     * @return Response
     */
    public function UserExport()
    {       
    
        return Excel::download(new UsersExport, 'users.xlsx');
    
    }
}

Y ya para finalizar crar la ruta en el archivo route\web.php que nos llevarla al metodo UserExport() para crear el informe o listado de nuestros usuarios de la Base de Datos, Este es un ejemplo sencillo de lo que esta libreria es capaz de hacer solo has de leer su documentación, la cual esta muy bien y aprender mas cosas.

Route::get('/export/users', [App\Http\Controllers\ExcelController::class, 'UserExport']);

Ahora ve al navegador ve a la ruta y verás como se descarga el archivo de excel con el listado de usuarios, lo mismo puedes hacer con cualquier tabla de tu base de datos y usar el ORM Eloquent de la manera que quieras para generar los reportes de productos, ventas, beneficios, proveedores, anunciantes, lo que necesites.