Cómo Exportar archivos en formato Excel con Laravel Excel

Video thumbnail

Los archivos Excel siguen siendo uno de los formatos más utilizados para compartir datos. En proyectos Laravel, es muy común que en algún punto necesitemos exportar listados, generar reportes periódicos o simplemente sacar información de la aplicación para trabajarla fuera. En mi caso, esto suele aparecer cuando hay que entregar reportes a clientes, hacer análisis rápidos o permitir que otras personas manipulen los datos sin entrar al sistema.

Para resolver todo esto de forma limpia y eficiente, Laravel Excel es, sin duda, la mejor opción dentro del ecosistema Laravel.

En este artículo te muestro cómo usar Laravel Excel para exportar datos a Excel paso a paso, sin rodeos, centrándonos en el caso real más habitual: exportar datos desde Eloquent a un archivo Excel.

Por qué usar Laravel Excel para generar archivos Excel

Laravel Excel es un paquete desarrollado por Maatwebsite que nos permite trabajar con archivos Excel (XLSX, CSV, entre otros) directamente desde Laravel. Su mayor ventaja es que se integra perfectamente con Eloquent, lo que hace que exportar datos sea casi tan sencillo como escribir una consulta.

En proyectos reales, exportar datos no suele ser un “extra”, sino una necesidad recurrente: listados de usuarios, registros, posts, ventas, reportes mensuales, etc. Y aquí es donde Laravel Excel brilla, porque evita soluciones manuales, código repetido o conversiones innecesarias.

Preparar el Proyecto

Para el proyecto, vamos a emplear cualquier instalación que tengas sobre Laravel, por ejemplo, la que tratamos anteriormente en la que dimos los primeros pasos con Laravel.

Así que simplemente crea un proyecto nuevo o con el cual estés realizando algunas pruebas y adelante.

Instalar Laravel Excel en un proyecto Laravel

Requisitos básicos del proyecto

Antes de empezar, asegúrate de tener:

  • PHP compatible con tu versión de Laravel
  • Composer instalado
  • Un proyecto Laravel funcionando

Instalación con Composer

Para instalar el paquete simplemente tenemos que ejecutar el siguiente comando de composer en nuestro proyecto en Laravel:

$ composer require maatwebsite/excel

En versiones modernas de Laravel, el paquete se registra automáticamente gracias al auto-discovery, así que no tienes que tocar nada más para empezar.

Publicar la configuración (opcional)

Normalmente no es necesario modificar la configuración, pero si quieres tener acceso a ella:

Configuraciones bases de Laravel Excel

Por lo demás no tenemos que hacer gran cosa, ya que como cualquier paquete prácticamente todo lo tenemos de gratis y podemos generar archivos en formato Excel muy fácilmente dado un modelo para indicar la consulta con la cual queremos trabajar.

Y ahora, tenemos que crear o publicar las configuraciones que vienen en el paquete por defecto:

$ php artisan vendor:publish

Esto generará un archivo de configuración que podrás ver en en la carpeta de configuraciones del proyecto que no abordaremos en esta entrada ya que no requerimos cambiar nada del mismo.

Exportar datos a Excel en Laravel usando Eloquent

Este es el núcleo del artículo y el caso más frecuente en proyectos reales.

Crear nuestra clase de exportación

Una vez instalado y configurado nuestro paquete, lo siguiente que tenemos que hacer es generar una archivo especial de esta librería en la cual tenemos que implementar una clase con la consulta de Eloquent  (archivo de exportación) sobre el modelo cuyos datos queremos exportar; para esto el siguiente comando de artisan:

$ php artisan make:export PostsExport --model=Post

Al pasar la opción --model, indicamos qué modelo vamos a exportar. Esto ya nos deja una estructura preparada.

Al pasar la opción de model, como puedes suponer nos permite especificar el modelo que queremos hacer exportable, los datos que vamos a exportar vía Excel y de esta manera se autogeneran algunos métodos y procedimientos al momento de generar el archivo que vamos a explicar a continuación.

Nuestro modelo luce como el siguiente:

<?php
 
namespace App;
 
use App\Category;
use Illuminate\Database\Eloquent\Model;
 
class Post extends Model
{
    protected $fillable = ['title', 'url_clean', 'content', 'category_id', 'posted'];
    public function category()
    {
        return $this->belongsTo(Category::class);
    }
}

Y el de categoría:

<?php
 
namespace App;
 
use App\Post;
use Illuminate\Database\Eloquent\Model;
 
class Category extends Model
{
    protected $fillable = ['title', 'url_clean'];
 
    public function post()
    {
        return $this->hasMany(Post::class);
    }
}

Usar FromCollection para exportar registros

Esta clase, que es básicamente lo que va a generar sobre app/Exportar nos va a permitir indicar la colección, que es básicamente la consulta SQL mediante nuestro ORM de Eloquent; por ejemplo, si queremos obtener todos os registros, simplemente empleamos la función de all():

use Maatwebsite\Excel\Facades\Excel;
 
namespace App\Exports;
 
use App\Post;
use Maatwebsite\Excel\Concerns\FromCollection;
 
class PostsExport implements FromCollection
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        return Post::all();
    }
}

Como puedes ver, simplemente empleamos algún modelo cualquiera con el cual queramos trabajar que en este caso es de uno llamado Post; en nuestro archivo de exportación indicamos las operaciones de Eloquent para indicar con qué datos queremos trabajar, en este caso sería con todos los post, por lo tanto indicamos un all en el método collection, pero puedes colocar algún filtro con un where o algo por el estilo para indicar un subconjunto de datos.

Definir qué datos se exportan (no exportar todo)

Aunque Post::all() funciona, en la práctica casi nunca queremos exportar absolutamente todo. Normalmente filtramos datos, fechas o estados.

Por ejemplo:

public function collection()
{
   return Post::where('posted', true)->get();
}

Esto es muy habitual cuando generas reportes reales y no simples dumps de información.

Descargar un archivo Excel desde un controlador en Laravel

Una vez creada la clase de exportación, solo queda usarla.

Usar el Facade Excel

En tu controlador:

use App\Exports\PostsExport;
use Maatwebsite\Excel\Facades\Excel;
public function export()
{
   return Excel::download(new PostsExport, 'posts.xlsx');
}

Este método devuelve directamente la descarga del archivo Excel como respuesta HTTP.

Configurar la ruta para la descarga

Como en cualquier flujo de Laravel, definimos una ruta:

Route::get('/dashboard/excel/post-export', 'Dashboard\PostController@export')
   ->name('post.export');

Al acceder a esa URL, el archivo Excel se descarga automáticamente. En más de un proyecto, este tipo de ruta termina integrada en botones de “Exportar” dentro del panel de administración.

Exportando el Excel desde el controlador

Ahora con la clase generada anteriormente, lo siguiente que tenemos que hacer es emplearla, para eso desde nuestro controlador o crea alguno como tu quieras tal cual hicimos en la entrada de Creando un formulario y enviando peticiones Post creamos la función correspondiente y empleamos el Facade Excel, indicamos la función descargar la cual recibe dos parámetros, la clase anterior, como fuente de datos, y el nombre del archivo, esto obviamente lo tenemos que retornar ya que viene siendo la respuesta que va a devolver esta función mediante http, la descarga de un archivo:

public function export(){
     return Excel::download(new PostsExport, 'posts.xlsx');
}

Exportar solo un subconjunto de datos a Excel

Uno de los grandes puntos fuertes de Laravel Excel es que puedes aprovechar toda la potencia de Eloquent.

Filtrar datos con where en Eloquent

Puedes aplicar cualquier condición:

return Post::where('category_id', 3)->where('posted', true)->get();

Configurando la ruta para exportar el Excel

A partir de aquí son los pasos rutinarios, en cualquier proceso que queramos hacer el Laravel, en este caso sería de generar una ruta común y corriente que ya tratamos anteriormente:

Y si vamos a la ruta que configuramos anteriormente:

Route::get('/dashboard/excel/post-export', 'dashboard\PostController@export')->name('post.export');

Verás que descargamos de manera automática un archivo Excel como el siguiente:

Exportación de Excel vía Laravel

De esta manera, podemos generar fácilmente un archivo excel en Laravel; como puedes ver, puedes aplicar cualquier tipo de condición en la clase FromCollection para no trabajar con todo el pull de datos.

Cuándo usar FromCollection vs FromQuery

  • FromCollection: ideal para volúmenes pequeños o medianos.
  • FromQuery: mejor opción si la tabla es grande y no quieres cargar todo en memoria.

En proyectos con muchos registros, suelo optar por FromQuery para evitar problemas de rendimiento, aunque para listados simples FromCollection sigue siendo suficiente.

Formatos de archivo compatibles con Laravel Excel

Laravel Excel soporta múltiples formatos, entre los más usados:

  • XLSX (Excel)
  • CSV
  • TSV
  • ODS

Cambiar el formato es tan simple como cambiar la extensión del archivo:

return Excel::download(new PostsExport, 'posts.csv');

XLSX y CSV cubren el 90% de los casos reales.

Buenas prácticas al trabajar con Laravel Excel

Después de usar Laravel Excel en varios proyectos, hay algunas recomendaciones claras:

  • No exportes columnas innecesarias
    • Cuantos menos datos, mejor rendimiento y mejor experiencia para quien recibe el Excel.
  • Filtra siempre que puedas
    • Exportar todo suele ser innecesario y poco útil.
  • Piensa en quién va a usar el archivo
    • El Excel no es para la base de datos, es para personas.
  • Cuidado con tablas grandes
    • Si hay muchos registros, usa consultas optimizadas o FromQuery.

Estas pequeñas decisiones marcan la diferencia entre un export “que funciona” y uno realmente usable.

Preguntas frecuentes sobre Laravel Excel

  • ¿Qué es Laravel Excel?
    • Es un paquete para Laravel que permite importar y exportar archivos Excel, CSV y otros formatos usando Eloquent.
  • ¿Laravel Excel es gratis?
    • Sí, es un paquete open source mantenido por Maatwebsite.
  • ¿Puedo exportar datos filtrados?
    • Sí, puedes usar cualquier consulta Eloquent antes de exportar los datos.
  • ¿Funciona con modelos Eloquent?
    • Sí, de hecho es una de sus mayores ventajas.

Conclusión: Laravel Excel como solución práctica para reportes

Laravel Excel es una herramienta extremadamente práctica para el día a día. En lugar de reinventar la rueda, te permite exportar datos desde Eloquent a Excel de forma limpia, rápida y mantenible.

En mi caso, se ha convertido en una solución recurrente para reportes, listados y entregables, sobre todo cuando necesitas sacar información fuera de la aplicación sin complicaciones.

Si trabajas con Laravel y en algún momento necesitas generar archivos Excel, Laravel Excel es el paquete que deberías estar usando.

Vamos a ver cómo podemos generar un archivo Excel mediante Laravel, para esto vamos a hacer uso de un paquete que nos va a facilitar enormemente todo este proceso.

Acepto recibir anuncios de interes sobre este Blog.

Andrés Cruz

EN In english