amjadiqbal/filament-xlsx-import
A Filament plugin for importing XLSX spreadsheets directly into your resources, with a simple upload flow and column mapping so you can bring spreadsheet data into your admin panel without writing custom import logic.
Architecture fit
amjadiqbal/filament-xlsx-import is a thin Filament plugin that extends Filament's native importer with XLSX support (and optional CSV) via openspout. It does not introduce a parallel import pipeline — it plugs into core's ImportDispatcher/chunk-job model, which is the right shape for a Filament-first stack.composer update.Integration feasibility
openspout (4.23), plus a fresh composer require on clean Laravel 12 + Filament 4 and Laravel 13 + Filament 5 apps with a headless-Chrome UI test. That is a stronger signal than a typical 1.0.x patch.Technical risk
ImportDispatcher constructs every chunk's job in that request (same as CSV). Streaming therefore does not bound peak memory — memory scales with row count, not chunk size. For large workbooks this is an operational ceiling, not a bug, but it must be planned for.ImportDispatcher job construction) is the main upgrade hazard: a Filament major that changes dispatch semantics could change memory behavior or break the plugin without an API change on the plugin's side..xls handling and missing-sheet messaging were incorrect in 1.0.0; both are user-facing failure modes now fixed, which reduces confusing support traffic.headerOffset() counts empty rows (headerOffset(2) reads row 3) — documented, but a likely source of misconfiguration in real spreadsheets with blank leading rows.Key questions
memory_limit and chunk size do we need to hold that?.xls uploads at all, or is XLSX-only acceptable? Do we need acceptCsv(false) behavior?Stack fit
openspout) plus the plugin; no new services, no external storage assumptions stated.Migration path
composer update amjadiqbal/filament-xlsx-import, no code changes. Re-run our import smoke test and confirm the two fixed behaviors (missing sheet message, .xls rejection copy).Compatibility
^1.0 and record the tested matrix in our dependency policy. Treat Filament major upgrades as requiring an explicit re-test of this plugin, with the headless UI import test as the gate.openspout resolves at or above 4.23; the plugin is tested at that floor.Sequencing
.xls with acceptCsv(false).Maintenance
Support
headerOffset() semantics, and template provenance remove the three most likely "why did it do that" tickets..xls rejection copy reduce misdiagnosed "file is corrupt" reports.Scaling
Failure modes
headerOffset is misused — produces shifted or lost columns rather than an error.ImportDispatcher internals; would surface as duplicate, missing, or memory-heavy job dispatch.openspout resolved below the tested floor, or a transitive bump outside the tested matrix.Ramp-up
sheet(), acceptCsv(), headerOffset()), so a developer familiar with Filament imports is productive in under a day.How can I help you explore Laravel packages today?