notiziephp.it

Fast Excel 5.x aggiunge import in streaming ed export più sicuri

Traduzione da Laravel News
20 Settembre 2026 Tempo di lettura: 4 minuti
Fast Excel 5.x aggiunge import in streaming ed export più sicuri

Fast Excel è cambiato in modo sostanziale da quando Laravel News ha trattato il pacchetto nel 2020. Quell'articolo riguardava gli export di collection dell'era v2.2, i download dal browser e i workbook multi-foglio. Fast Excel 5 ora include import lazy, controlli per suddividere il lavoro sui fogli di calcolo tra job, selezione di fogli e colonne e una gestione più sicura dei valori di export controllati dall'utente.

Le release recenti rendono Fast Excel più utile per import operativi di grandi dimensioni, non solo per semplici download di report. Il pacchetto continua a usare OpenSpout invece di cercare di esporre ogni funzionalità del formato file Excel, il che lo mantiene concentrato sulla lettura e scrittura di righe con un uso ridotto della memoria.

  • importLazy() legge le righe tramite una LazyCollection
  • headerRow(), startRow() e limitRows() supportano import a chunk
  • sheet() e onlyColumns() selezionano i dati necessari a un import
  • escapeFormulas() scrive come testo i valori simili a formule controllati dall'utente

Import lazy per file di grandi dimensioni

import() restituisce una collection contenente ogni riga importata. Per un upload di grandi dimensioni, questo può usare più memoria di quanta ne abbia a disposizione il processo PHP. importLazy() produce le righe tramite una LazyCollection, così un'applicazione può raggruppare il lavoro sul database senza conservare l'intero file:

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.12 ha introdotto importLazy() insieme ai cambiamenti per l'export in streaming. Il benchmark del pacchetto confronta un export con generator con una collection materializzata, e il repository include lo script di benchmark. Per un import che arriva come CSV, lo stesso approccio può sostituire parte del parsing manuale usato per un upload CSV di grandi dimensioni.

Import in chunk con intestazioni stabili

I controlli di import più recenti sono utili quando un job in coda deve elaborare una porzione di un foglio di calcolo. headerRow() legge le chiavi dalla riga di intestazione effettiva, mentre startRow() seleziona dove inizia il chunk corrente e limitRows() ne limita la dimensione:

use Rap2hpoutre\FastExcel\FastExcel;

$rows = (new FastExcel)
->headerRow(1)
->startRow(2 + ($page * 1_000))
->limitRows(1_000)
->import('orders.xlsx');

Prima di Fast Excel 5.17, startRow() trattava anche la riga selezionata come intestazioni. Un chunk successivo poteva quindi usare una riga di dati come chiavi. headerRow() separa queste posizioni e lascia invariato il vecchio comportamento di startRow() a meno che tu non lo attivi esplicitamente. #418 ha aggiunto il metodo.

Selezionare fogli e colonne

Il pacchetto può selezionare un foglio per nome e mantenere solo le colonne necessarie a un import:

use Rap2hpoutre\FastExcel\FastExcel;

$orders = (new FastExcel)
->sheet('Orders')
->onlyColumns(['A', 'B', 'H'])
->import('customer-export.xlsx');

onlyColumns() accetta lettere di colonna o posizioni con base uno. Evita di restituire campi vuoti da fogli in cui la formattazione è stata applicata molto oltre i dati reali. limitColumns() è disponibile quando invece un import necessita di ogni colonna fino a una determinata posizione. Queste opzioni sono arrivate in Fast Excel 5.16, che ha anche aggiunto la possibilità di passare un'istanza di cella OpenSpout come valore di export. #419

Escaping delle formule dei fogli di calcolo

Le applicazioni per fogli di calcolo possono trattare i valori che iniziano con =, +, - o @ come formule. Quando questi valori provengono da un CSV caricato o da un campo del database controllato dagli utenti, un export di report può trasformare semplice testo in una formula quando qualcuno lo apre.

Chiama escapeFormulas() prima di esportare per scrivere quei valori come testo:

use Rap2hpoutre\FastExcel\FastExcel;

(new FastExcel($rows))
->escapeFormulas()
->export('orders.xlsx');

Fast Excel 5.17 ha aggiunto il metodo in #411.

Compatibilità

Fast Excel 5 richiede PHP 8.0 o successivo e Laravel 6 o successivo. La release corrente supporta Laravel dalla 6 alla 13 e usa OpenSpout 4. Le applicazioni ancora su Laravel 5 o sulla baseline PHP 7 supportata da Fast Excel 2 devono pianificare separatamente l'aggiornamento delle dipendenze.

La storia delle major version include il passaggio da box/spout a openspout/openspout, oltre al requisito di PHP 8 in Fast Excel 5. I progetti che usano una release precedente di Fast Excel dovrebbero verificare questi cambiamenti nelle dipendenze prima di aggiornare.

Installazione

Installa Fast Excel con Composer:

composer require rap2hpoutre/fast-excel

Riferimenti

Condividi su: LinkedIn

Altri articoli recenti