Laravel News publicó este análisis el 22 de septiembre de 2026. El texto repasa la evolución de Fast Excel desde la cobertura de 2020 sobre la versión 2.2. Aquella edición se centraba en exportaciones desde colecciones, descargas en el navegador y libros con varias hojas. Fast Excel 5 amplía el enfoque hacia importaciones operativas grandes, trabajos de cola divididos y selección de hojas y columnas.

import-lazy.php
<?php

use App\Models\Contact;
use Illuminate\Support\LazyCollection;
use Rap2hpoutre\FastExcel\FastExcel;

(new FastExcel)->importLazy('contacts.xlsx')
    ->chunk(1_000)
    ->each(function (LazyCollection $contacts) {
        Contact::insert($contacts->all());
    });

Fast Excel 5 requiere PHP 8.0 o posterior y Laravel 6 o posterior. La versión actual admite Laravel 6 a 13 y utiliza OpenSpout 4. El cambio de versión principal también sustituyó box/spout por openspout/openspout. Los proyectos que siguen en Laravel 5 o PHP 7 con Fast Excel 2 deben planificar por separado la actualización de dependencias.

El paquete mantiene un procesamiento centrado en filas y con bajo consumo de memoria. Fast Excel 5.12 incorporó importLazy() junto con cambios en las exportaciones mediante streaming. La función entrega las filas a través de Illuminate\Support\LazyCollection. Una aplicación puede procesar lotes para la base de datos sin conservar todo el archivo cargado. El repositorio incluye readme-export-bench.php, que compara una exportación basada en un generador con otra construida desde una colección materializada. El artículo también relaciona este enfoque con las cargas grandes de CSV que suelen requerir análisis manual.

headerRow(), startRow() y limitRows() permiten dividir un archivo en partes para trabajos de cola. headerRow() obtiene los nombres desde la fila real de encabezados. startRow() marca el inicio de cada parte y limitRows() fija su máximo. Antes de Fast Excel 5.17, startRow() también convertía la fila seleccionada en encabezados. Una parte posterior podía interpretar una fila de datos como nombres de campos. headerRow() separa ahora ambas posiciones y mantiene el comportamiento anterior de startRow() cuando no se activa la nueva opción. La PR #418 añadió este método.

Fast Excel 5.16 añadió sheet() para elegir una hoja por nombre y onlyColumns() para importar únicamente las columnas necesarias. onlyColumns() admite letras de columna o posiciones basadas en uno, como A, B y H. Así se evitan campos vacíos provocados por formatos aplicados mucho más allá de los datos reales. limitColumns() sirve cuando se necesitan todas las columnas hasta una posición concreta. La misma versión permitió pasar una instancia de celda de OpenSpout como valor de exportación. La PR #419 introdujo estos cambios.

La versión 5.17 incorporó escapeFormulas() mediante la PR #411. Al ejecutarlo antes de exportar, los valores que empiezan por =, +, - o @ se escriben como texto. Las aplicaciones de hojas de cálculo dejan de tratarlos como fórmulas cuando proceden de un CSV subido o de un campo de base de datos controlado por usuarios. La instalación con Composer utiliza composer require rap2hpoutre/fast-excel.