Cómo Exportar archivos en formato Excel con Laravel Excel

- Andrés Cruz

In english
Cómo Exportar archivos en formato Excel con Laravel Excel

Los archivos Excel son un popular formato para compartir datos, si tenemos un listado de datos en Laravel, muchas veces es necesario exportar los datos en una hoja de excel para que sean fácilmente consumibles y poder realizar operaciones adicionales fuera de la aplicación en Laravel, o para hacer reportes cada cierto tiempo etc… su alcance es ilimitado y existen muchos escenarios en donde son muy utiles.

Los archivos excel son propietarios de Microsoft Office. Estos archivos permiten crear, editar y analizar datos y se presentan como libros de trabajo que contienen varias hojas, y esta formados en celdas.

En esta entrada, veremos como suar los archivos excel en Laravel.

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 el paquete Laravel-Excel

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

composer require maatwebsite/excel

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.

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 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);
    }
}

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.

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');
    }

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.

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.