Exportar excel en Laravel

Como hemos comentado en la entrada anterior, sobre como exportar pdf en laravel, en muchas ocasiones necesitamos la información que tenemos en nuestra base de datos y una de las mejores formas de exportación es mediante excel.

Para exportar en laravel a excel vamos a utilizar la libreria de Maatwebsite, en 10 minutos tendremos nuestra exportación lista.

Añadir la librería a nuestro proyecto laravel

Lo primero de todo es importar la librería en nuestro proyecto mediante composer, para ello escribimos en nuestra consola el siguiente comando: 

composer require maatwebsite/excel

Una vez instalado, procedemos a insertarlo en nuestro archivo app.php, que encontraremos en la carpeta config de nuestro proyecto, para poder hacer uso de la libreria en nuestra aplicación.

En el apartado de providers insertaremos la clase de la siguiente forma: 

'providers' => [

...,
...,
Maatwebsite\Excel\ExcelServiceProvider::class,

],

Despues de añadir la clase, seguimos bajando en nuestro archivo app.php hasta llegar a «aliases», donde indicaremos el alias con el que nombraremos a la librería de excel en nuestra aplicación laravel, en este caso, le pondremos el nombre de Excel:

'Excel' => Maatwebsite\Excel\Facades\Excel::class,​

Con esto ya estaría la clase preparada para usarla en toda nuestra aplicación.

Configuración de la librería para la exportación

Ahora debemos configurar la exportación del excel para indicarle que datos vamos a exportar, como queremos que se muestren… Para ello vamos a la carpeta App y dentro de ella crearemos otra carpeta que llamaremos Exports, donde guardaremos la configuración que le pondremos a cada una de nuestras exportaciones. Para este ejemplo, vamos a crear una exportación de la base de datos de usuarios creados en nuestra aplicación laravel. Para ello crearemos una clase dentro de la carpeta «exports» que acabamos de crear y le pondremos el nombre de «UsersExport.php».

A esta clase le vamos a implementar «FromCollection«, para retonar los datos de la colección que queramos de nuestra base de datos y WithHeading, donde indicaremos el nombre de cada campo del la cabecera de nuestro excel, quedaría una cosa así:

<?php

namespace App\Exports;

use App\User;
use DB;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class UsersExport implements FromCollection,WithHeadings
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function headings(): array
    {
        return [
            'Id',
            'Nombre',
            'Email',
        ];
    }
    public function collection()
    {
         $users = DB::table('Users')->select('id','name', 'email')->get();
         return $users;

    }
}
​

De esta forma tan sencilla, estamos indicando en la function heading, que queremos que nuestra cabecera tenga tres columnas ( Id, Nombre, Email). Por otra parte, en la función collection estamos haciendo una llamada a la tabla users de la base de datos y le indicamos que queremos los campos id, name y email de la colección, que guardaremos en la variable «$users» y lo retornamos para que se ejecute la exportación.

Si quisieramos devolver todas las columnas de nuestra tabla, no haria falta poner uno por uno los campos en el select, simplemente nos ahorrariamos la llamada al select y nos devolvería toda la tabla, de la siguiente forma:

$users = DB::table('Users')->get();

Generando nuestro excel

Ahora ya solo nos quedaría crear en nuestro controlador la siguiente función:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;


class HomeController extends Controller
{
    public function export(){
        return Excel::download(new UsersExport, 'users.xlsx');
    }
}

En el metodo download añadiremos dos parametros, el primero el nombre de la clase donde hemos configurado el header y los datos del excel a exportar, y en el segundo será el nombre que queremos darle al excel exportado. Recuerda que debemos añadir la clase  y también la librería que hemos importado en el app.php anteriomente, en la parte superior, como vemos en el codigo:

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

Una vez hecho esto, creamos la ruta que llamará a esta función:

Route::get('/exportar', 'HomeController@export');​

y ahora solo nos queda hacer la llamada a nuestra ruta desde nuestra vista, una forma rapida es escribir la ruta en el navegador o simplemente creando un enlace en nuestra plantilla blade de laravel:

<a href="/exportar">exportar</a>

Si necesitas alguna función más en tu exportación, visita la documentación de la libreria de maatwebsite.