akeneo-labs/spreadsheet-parser
Lightweight spreadsheet reader focused on low memory usage, even for large files. Parses XLSX and CSV, exposes workbook/worksheet APIs, and provides row iterators for streaming data extraction with configurable CSV options (encoding, delimiter, enclosure, etc.).
PhpSpreadsheet).SpreadsheetService) to handle file processing in bulk operations.SpreadsheetParsed) to trigger downstream actions (e.g., database imports, notifications).PhpSpreadsheet), and written in PHP (native integration).request()->file()), validation, and storage (e.g., storage_path()).League/Csv or Maatwebsite/Excel (which uses PhpSpreadsheet) to validate speed improvements.| Risk Area | Mitigation Strategy |
|---|---|
| PHP Version Support | Test on PHP 8.1+; use rector for backward compatibility if needed. |
| Deprecated APIs | Audit against Laravel’s deprecation channel or use laravel-debugbar for warnings. |
| Memory Leaks | Profile with xdebug or Blackfire to ensure no resource bloat in long-running jobs. |
| Security | Validate file types (e.g., mime_type()) and sanitize parsed data to prevent SSRF/XSS. |
| Maintenance | Fork the repo or propose updates to maintainer (low stars suggest inactive project). |
PhpSpreadsheet or Box/Spout?
spreadsheet:parse job).php artisan import:spreadsheet).PhpSpreadsheet for stability).Maatwebsite/Excel).Illuminate\Http\Request to handle uploads:
$file = request()->file('spreadsheet');
$parser = new \AkeneoLabs\SpreadsheetParser\Parser($file->getPathname());
storage/app/ or a dedicated spreadsheets/ directory.try-catch and log errors to laravel.log or a monitoring tool (e.g., Sentry).SpreadsheetServiceProvider).class SpreadsheetParser {
public function parse(File $file): array {
$parser = new \AkeneoLabs\SpreadsheetParser\Parser($file->getPathname());
return $parser->parse();
}
}
class ParseSpreadsheetJob implements ShouldQueue {
use Dispatchable, InteractsWithQueue, Queueable;
public function handle() {
$data = app(SpreadsheetParser::class)->parse($this->file);
// Process data (e.g., save to DB)
}
}
spreadsheet:health Artisan command).PhpSpreadsheet.dd() or Xdebug to inspect parsed data structures.storage/logs/failed_parses/).memory_limit and max_execution_time for large files (e.g., 512MB+).| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Malformed XLSX | Parser crashes or hangs | Validate file integrity pre-parsing. |
| Out of Memory (OOM) | Worker dies, job fails | Use chunked parsing or smaller batches. |
| Database Locks | Slow writes block queue | Implement retries with exponential backoff. |
| PHP Version Incompatibility | Parser fails silently | Use a Docker image with compatible PHP version. |
SpreadsheetParser::parse()).How can I help you explore Laravel packages today?