Cómo exportar datos a Excel con Laravel

En nuestros proyectos muchas veces vamos a necesitar exportar nuestros datos, ya sea porque el cliente lo requiera o simplemente porque necesitamos poder extraer esos datos del sistema, en este tutorial explicare como exportar tus datos de manera fácil a Excel.

Utilizaré la última versión de Laravel hasta esta fecha la 5.4. Teniendo Laravel 5.4 instalado vamos a instalar el paquete

https://github.com/Maatwebsite/Laravel-Excel

Instalación y Configuración:

Para instalarlo solo tenemos que ejecutar: composer require maatwebsite/excel en nuestro proyecto.

Una vez instalado lo debemos añadir el Service provider en el archivo config/app.php

También el facade a los alias:

Ahora  necesitaremos unos datos los cuales exportar, usaremos los de la tabla users por defecto de Laravel para eso primero configuramos una conexión a nuestra base de datos en el archivo .env  y después ejecutamos php artisan migrate.

NOTA: Ayudándome de un seed y el componente Faker generé 30 usuarios para exportar sus datos.

Uso:

Para empezar crearemos un Controlador ejecutando:

php artisan make:controller ExcelController.

y crearemos una ruta a la cual accederemos para extraer los datos

Para exportar todos nuestros usuarios definiremos el metodo exportUsers dentro del controlador creado y dentro del método pondremos:

Con el metodo create() creamos un nuevo documento de excel, este método requiere 2 parametros, el primero es el nombre del archivo, y el segundo en este caso es un callback para poder manipular lo que contendrá nuestro archivo.

Primero obtenemos todos los usuarios con Eloquent y después utilizando el método sheet() creamos una nueva hoja dentro del documento de Excel, este método recibe como primer parametro el nombre de la hoja users y un callback donde le pasaremos los usuarios, utilizando el metodo fromArray() insertara los datos del array pasado como argumento y con el método export() le indicamos exporte el documento, el parámetro es el formato de la descarga en este caso xlsx.

Al acceder a la ruta /export-users obtendremos el archivo muestra todos los registros.

Modificando filas:

Ya sabemos exportar los registros de una manera rápida ahora vamos a personalizar un poco mas el documento, utilizando el método row() podremos modificar cada fila del documento y editar las casillas que necesitemos, en este caso cambiaremos los nombres de los títulos del la base de datos para traducirlos y que queden más legibles para el usuario.

el método row() acepta 2 parámetros, el primero es la fila que se va a editar y el segundo es un array que contiene cada casilla que se editara.

Ahora utilizaremos el mismo método para los introducir los registros quedando de esta manera:

con un foreach recorreremos los usuarios para insertarlos, utilizamos el indice para indicarle que empiece desde la fila número 2 para no sustituir la numero 1, al acceder a la ruta /export-users obtendremos un resultado mas amigable para el usuario.

El paquete incluye muchas mas funcionalidades todas esta información esta en su documentación oficial: http://www.maatwebsite.nl/laravel-excel/docs

Esto ha sido todo, espero que les sea de gran ayuda este paquete ya que a mi me ha servido mucho para extraer datos de los proyectos.

Comparte este artículo

Entra en la discusión y deja tu comentario

  • wii_ch0

    Excelente artículo, estaba viendo que se puede exportar a un PDF, dentro de las bondades de este paquete, he realizado las modificaciones que en la documentación indican y he tenido éxito 😉 pero mi problema es al momento de querer darle formato al PDF (header, footer, márgenes, colores). Para esto estoy utilizando el driver mPdf con el cual he trabajado anteriormente, pero con este paquete no.

    Alguien o alguna idea de cómo modificar visualmente el PDF!?

    Saludos,

  • Gustavo Herrera

    Buenas, me sale este error
    ErrorException in HasAttributes.php line 283:
    array_flip() expects parameter 1 to be array, string given

    intente hacer este proceso

    Excel::create(‘Laravel Excel’, function($excel) {

    $log = Log::all();

    $excel->sheet(‘Excel sheet’, function($sheet) use($log) {

    $sheet->fromArray($log);

    });

    })->export(‘xls’);

    • Gustavo Herrera

      Listo el problema era el modelo en la parte del hidden simplemente se eliminina el campo y quedaria asi protected $hidden; y listo funciona bien, Gracias.

  • Fabio Andres Pino Gutierrez

    Gracias KsCorrales

    • KsCorrales

      Me alegra que te haya gustado :3

Veces