Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Excel Bundle Laravel Package

onurb/excel-bundle

Symfony bundle that integrates PHPExcel to read and write Excel spreadsheets, exposing the library as a service with helpers for controllers and templates. Simplifies importing data from and exporting data to XLS/XLSX files in Symfony applications.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. onurb/excel-bundle is a Symfony bundle, not a Laravel package. Its functional surface is thin: it wires phpoffice/phpspreadsheet into Symfony's DI container, exposes configuration for reader/writer services, and packages format handlers (XLSX, ODS, CSV, PDF, HTML). In a Laravel codebase there is no bundle registration mechanism — the abstraction provides no benefit, and the real value (PhpSpreadsheet) is framework-agnostic and already installable via Composer. Architectural fit for a Laravel stack is therefore poor as a direct dependency, but acceptable as a reference implementation if we need multi-format read/write semantics.

Integration feasibility. Two viable paths: (a) depend on phpoffice/phpspreadsheet directly and write a small internal service wrapper (~100–200 LOC) for format detection, IO, and temp-file handling; (b) adopt maatwebsite/excel if the use case is import/export-to-model. Porting the bundle itself into a Laravel service provider is possible — its service definitions are simple — but we would be re-hosting a 13-star, single-maintainer artifact with 0 dependents, which is a weak signal of production hardening.

Technical risk.

  • Supply chain / bus factor: one maintainer, 13 stars, no downstream dependents; abandonment risk is high and we become the de facto maintainer.
  • Abstraction lag: the bundle can pin or trail PhpSpreadsheet releases, blocking security patches (XXE, zip-bomb, and CSV formula-injection classes of issue that PhpSpreadsheet has historically carried).
  • PDF/ODT claims: PDF writing depends on external renderers (Dompdf/mpdf) and is quality-limited; ODT support is read-oriented and lossy versus native tooling. Marketing-level format claims should be validated against actual fixtures.
  • Memory profile: PhpSpreadsheet loads workbooks into memory; large XLSX files are a known operational hazard independent of the bundle.
  • Composer friction: Symfony component version constraints can conflict with Laravel's pinned symfony/* transitives, forcing resolution gymnastics.

Key questions for the team.

  1. What is the actual job — parsing user uploads, generating reports, or both — and which formats are genuinely required (XLSX-only is far cheaper than XLSX+ODT+PDF)?
  2. Are we already standardized on maatwebsite/excel or raw PhpSpreadsheet elsewhere? Duplication is the main cost here.
  3. What is the expected file-size and concurrency envelope, and can we push generation to a queue?
  4. Do we accept ownership of a fork if upstream stalls?
  5. What is the threat model for uploaded spreadsheets (untrusted input, formula injection on re-export)?

Integration Approach

Stack fit. Treat this as not fit-for-purpose for Laravel. The bundle's only genuine differentiator is Symfony service wiring, which Laravel replaces with its own container and service provider pattern. The correct integration is at the library layer, not the bundle layer.

Recommended path (in preference order).

  1. Direct PhpSpreadsheet wrapped in an internal SpreadsheetService (or a thin domain port) if we need multi-format IO and full control over readers/writers. Lowest dependency surface, highest control.
  2. maatwebsite/excel if the workload is conventional model import/export with queued chunking — it is the Laravel-idiomatic choice and has the ecosystem weight this bundle lacks.
  3. Port the bundle's service definitions into a Laravel service provider only if a specific format handler (e.g., ODS or PDF writer configuration) justifies it. Copy the relevant classes under our namespace, pin PhpSpreadsheet ourselves, and record the provenance and MIT attribution.

Migration path. If a sibling Symfony service already uses this bundle, leave it there — do not destabilize a working service to achieve cosmetic parity. For the Laravel side, extract the format-resolution logic (extension/MIME → reader/writer) into a shared internal spec so both stacks behave identically, then implement it natively in Laravel. If we are replacing an existing phpexcel-era integration, migrate directly to PhpSpreadsheet (or maatwebsite/excel) rather than routing through this bundle.

Compatibility checks before committing.

  • PHP version floor and required extensions (ext-zip, ext-gd, ext-xml, ext-mbstring, ext-fileinfo).
  • Transitive symfony/* ranges versus the Laravel version in use — run composer why-not against the target framework release.
  • PhpSpreadsheet major-version pinning and whether the bundle constrains it.

Sequencing.

  1. Spike (1–2 days): prove the top three real-world files (a large XLSX upload, a generated report, an edge-case malformed file) against PhpSpreadsheet directly.
  2. Wrap: implement the internal adapter behind an interface so the library is swappable.
  3. Harden: add validation, size limits, temp-file lifecycle, and queued generation.
  4. Retire the bundle idea: document the decision so it is not re-litigated.

Operational Impact

Maintenance. Effectively we own it. With 13 stars and zero dependents there is no community to absorb upgrades, and issue response is likely best-effort. Budget for periodic PhpSpreadsheet bumps, PHP-version compatibility patches, and format-handler drift (especially ODS/PDF). If we fork, add it to the internal dependency register with an explicit owner and review cadence.

Support. No vendor, no SLA, no commercial backing. Escalation is "read the source." This is acceptable for a small, well-understood adapter and unacceptable for a revenue-critical export path without the internal wrapper insulating us.

Scaling. The binding constraint is memory, not the bundle. Mitigations: hard file-size caps at the upload boundary, readDataOnly and chunked/streamed reading for imports, queued generation with dedicated workers for exports, and explicit disconnectWorksheets()/unset discipline to avoid leaks in long-running workers. PDF generation adds CPU-bound rendering — isolate it from the web tier. At the expected envelope this is routine; at high volume it becomes a capacity-planning problem independent of package choice.

Failure modes to instrument.

  • Memory exhaustion / fatal OOM on oversized or zip-bomb workbooks.
  • Corrupt or spoofed files (extension/MIME mismatch) surfacing as raw library exceptions — needs mapping to clean 4xx responses.
  • Formula injection on re-export of user-supplied cells (prefix neutralization on =, +, -, @).
  • Temp-file and disk exhaustion from PhpSpreadsheet's intermediate artifacts; ensure cleanup on exception paths.
  • PDF renderer missing or misconfigured — degrade gracefully rather than 500.
  • Encoding/locale drift on CSV round-trips.
  • Silent version skew if the bundle pins PhpSpreadsheet and a security patch is blocked.

Ramp-up. Low. Any engineer familiar with PhpSpreadsheet is productive in hours; the bundle's conventions are minor and mostly Symfony-specific. The real onboarding cost is the operational envelope — file-size limits, queue topology, and cleanup behavior — which should be documented alongside the wrapper. Allocate roughly a day of enablement plus a written runbook covering failure triage.

Bottom line. The package's score (0.535) and opportunity signal (22.61) are consistent with a low-adoption, single-maintainer Symfony wrapper. For a Laravel stack, the correct TPM call is to decline the bundle as a dependency, adopt PhpSpreadsheet or maatwebsite/excel directly, encapsulate it behind an internal interface, and treat the bundle as documentation of patterns rather than a component to install.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource