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 unaLazyCollectionheaderRow(),startRow()elimitRows()supportano import a chunksheet()eonlyColumns()selezionano i dati necessari a un importescapeFormulas()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
Fonte originale:
https://laravel-news.com/fast-excel-5-xAltri articoli recenti
Laravel AI 1.1 e 1.2: Agent Skills, Cohere e structured output più solidi
Le release 1.1.0 e 1.2.0 di laravel/ai portano gli Agent Skills, l'approvazione obbligatoria per i tool built-in e nuovi provider come Cohere e Laya self-hosted. Sul fronte qualità arrivano i fix allo structured output per Bedrock e il supporto alle provider options. Aggiornati anche i modelli di default, con Claude 4.7+ che ignora i sampling params.
Laravel 13.35.0: scheduler più controllabile, code più flessibili e response Markdown
Laravel 13.35.0 porta Schedule::alwaysOnOneServer(), il supporto a schedule:interrupt per i comandi di lunga durata, --memory in percentuale per queue:work e il nuovo metodo markdown() sulla response factory. Tante piccole migliorie anche a test, view compilate in parallelo e dischi local.
BashBox: un interprete Bash in sandbox per agenti AI in PHP
BashBox è un interprete bash scritto in puro PHP che permette di eseguire gli script generati dagli agenti AI senza mai ricorrere a proc_open, exec o shell_exec. Ogni comando è una classe PHP che lavora su un filesystem virtuale, con limiti di esecuzione, quote disco e accesso di rete configurabili. Ideale per chi sviluppa agenti con il Laravel AI SDK o altre librerie simili.