Use this file as the completeness checklist for maatwebsite/excel. If a user asks for "all features", compare the task against every section here.
php artisan boost:add-skill maatwebsite/excel
Save this content to: .claude/skills/references-package/SKILL.md
# Laravel Excel Feature Coverage Reference
Use this file as the completeness checklist for `maatwebsite/excel`. If a user asks for "all features", compare the task against every section here.
## Repository Shape
- Package name: `maatwebsite/excel`
- Primary namespace: `Maatwebsite\Excel`
- Service provider: `Maatwebsite\Excel\ExcelServiceProvider`
- Facade: `Maatwebsite\Excel\Facades\Excel`
- Config file: `config/excel.php`
- Export/import concerns: `src/Concerns/`
- Console commands and stubs: `src/Console/`
- Tests: `tests/`
## Public Facade And Contracts
- `Excel::download($export, $fileName, $writerType = null, $headers = [])`
- `Excel::store($export, $filePath, $disk = null, $writerType = null, $diskOptions = [])`
- `Excel::queue($export, $filePath, $disk = null, $writerType = null, $diskOptions = [])`
- `Excel::raw($export, $writerType)`
- `Excel::import($import, $filePath, $disk = null, $readerType = null)`
- `Excel::queueImport($import, $filePath, $disk = null, $readerType = null)`
- `Excel::toArray($import, $filePath, $disk = null, $readerType = null)`
- `Excel::toCollection($import, $filePath, $disk = null, $readerType = null)`
- `Maatwebsite\Excel\Exporter`
- `Maatwebsite\Excel\Importer`
## File Types And Detection
- `Excel::XLSX`
- `Excel::CSV`
- `Excel::TSV`
- `Excel::ODS`
- `Excel::XLS`
- `Excel::SLK`
- `Excel::XML`
- `Excel::GNUMERIC`
- `Excel::HTML`
- `Excel::MPDF`
- `Excel::DOMPDF`
- `Excel::TCPDF`
- Extension detection through `config('excel.extension_detector')`
- `NoTypeDetectedException` when detection cannot resolve a writer/reader type
## Export Sources
- `FromArray`: rows from `array()`
- `FromCollection`: rows from `collection()`
- `FromGenerator`: rows from `generator()`
- `FromIterator`: rows from `iterator()`
- `FromQuery`: chunked query export from Eloquent, query builder, or relation
- `FromScout`: export from Laravel Scout builder
- `FromView`: export a Blade view/table
## Export Behavior And Formatting
- `Exportable`: object-level `download()`, `store()`, `queue()`, `raw()`, and responsable support
- `WithHeadings`: prepend heading rows
- `WithMapping`: transform each source row before writing
- `WithColumnFormatting`: PhpSpreadsheet number/date formats
- `WithColumnWidths`: fixed column widths
- `ShouldAutoSize`: auto-size columns
- `WithStyles`: style a worksheet directly
- `WithDefaultStyles`: workbook default styles
- `WithBackgroundColor`: workbook background color
- `WithEvents`: register event listeners manually
- `RegistersEventListeners`: auto-register static event listener methods
- `WithProperties`: workbook document properties
- `WithTitle`: worksheet title
- `WithCustomStartCell`: start export output at a custom cell
- `WithStrictNullComparison`: preserve empty string/null distinctions
- `WithPreCalculateFormulas`: pre-calculate formulas before writing
- `WithCharts`: attach PhpSpreadsheet charts
- `WithDrawings`: attach PhpSpreadsheet drawings/images
- `WithMultipleSheets`: build multi-sheet workbooks
- `WithConditionalSheets`: expose optional sheet subsets through `onlySheets()`
- `HasReferencesToOtherSheets`: mark formulas/references that cross sheets
- `WithCustomCsvSettings`: per-export CSV settings
- `MapsCsvSettings`: maps package CSV settings onto PhpSpreadsheet CSV writers/readers
- `WithCustomChunkSize`: override export chunk size
- `WithCustomQuerySize`: override query size estimation for queued query exports
- `WithProgressBar`: write progress to console output
- `WithColumnLimit`: limit exported columns through an end column
## Import Targets
- `ToModel`: convert each row to an Eloquent model, model array, or null
- `ToCollection`: handle rows as a Laravel collection
- `ToArray`: handle rows as arrays
- `OnEachRow`: process a `Row` object one row at a time
- `WithMappedCells`: map specific cells to named array keys
## Import Reading Controls
- `Importable`: object-level `import()`, `queue()`, `toArray()`, `toCollection()`, and console output support
- `WithHeadingRow`: use a heading row for keys
- `WithGroupedHeadingRow`: group duplicate heading names
- `WithStartRow`: choose first data row
- `WithLimit`: limit number of read rows
- `WithColumnLimit`: limit read columns through an end column
- `WithReadFilter`: use a PhpSpreadsheet read filter
- `WithCalculatedFormulas`: read calculated formula results
- `WithFormatData`: read formatted values
- `WithCustomCsvSettings`: per-import CSV settings
- `WithCustomValueBinder`: custom PhpSpreadsheet value binding
- `SkipsEmptyRows`: skip empty rows
- `SkipsUnknownSheets`: handle sheet names/indexes that do not exist
- `RemembersRowNumber`: inspect current row number during import
- `RemembersChunkOffset`: inspect current chunk offset during chunked import
## Import Persistence, Validation, And Failures
- `WithValidation`: row validation rules
- `SkipsOnFailure`: handle validation failures without aborting
- `SkipsFailures`: collect failures through `failures()`
- `SkipsOnError`: handle thrown row errors without aborting
- `SkipsErrors`: collect errors through `errors()`
- `WithBatchInserts`: batch model inserts
- `WithUpserts`: upsert by `uniqueBy()`
- `WithUpsertColumns`: select columns updated during upsert
- `WithSkipDuplicates`: skip duplicate rows during insert/upsert flows
- `PersistRelations`: persist model relations from import rows
- `ValidationException`
- `Failure`
- `RowSkippedException`
## Queueing And Batching
- Use `Illuminate\Contracts\Queue\ShouldQueue` for queued exports/imports.
- Use `Maatwebsite\Excel\Concerns\ShouldBatch` when queue operations should return a pending batch.
- Use `Maatwebsite\Excel\Concerns\ShouldQueueWithoutChain` for queued imports without job chaining.
- Queued exports use jobs such as `QueueExport`, `AppendDataToSheet`, `AppendQueryToSheet`, `AppendPaginatedToSheet`, `AppendViewToSheet`, `CloseSheet`, and `StoreQueuedExport`.
- Queued imports use `QueueImport`, `ReadChunk`, `AfterImportJob`, `AfterBatch`, `AfterChunk`, and `ProxyFailures`.
- `Jobs\Middleware\LocalizeJob` preserves locale preferences for queued work.
- Remote temporary files support multi-server queue processing.
## Events
- `BeforeExport`
- `BeforeWriting`
- `BeforeSheet`
- `AfterSheet`
- `BeforeImport`
- `AfterImport`
- `AfterChunk`
- `AfterBatch`
- `ImportFailed`
- Base event support through `Event` and `HasEventBus`
## Console Commands And Stubs
- `php artisan make:export ExportName`
- `php artisan make:export ExportName --model=User`
- `php artisan make:export ExportName --query`
- `php artisan make:export ExportName --model=User --query`
- `php artisan make:import ImportName`
- `php artisan make:import ImportName --model=User`
- Publish stubs with the package `stubs` publish tag.
- Publish config with the package `config` publish tag.
## Collection And Query Macros
- `DownloadCollectionMixin`
- `StoreCollectionMixin`
- `DownloadQueryMacro`
- `StoreQueryMacro`
- `ImportMacro`
- `ImportAsMacro`
- `Collection::downloadExcel($fileName, $writerType = null, $withHeadings = false, $responseHeaders = [])`
- `Collection::storeExcel($filePath, $disk = null, $writerType = null, $withHeadings = false)`
- `Builder::downloadExcel($fileName, $writerType = null, $withHeadings = false)`
- `Builder::storeExcel($filePath, $disk = null, $writerType = null, $withHeadings = false)`
- `Builder::import($filename, $disk = null, $readerType = null)`
- `Builder::importAs($filename, callable $mapping, $disk = null, $readerType = null)`
## Configuration Surface
- `exports.chunk_size`
- `exports.pre_calculate_formulas`
- `exports.strict_null_comparison`
- `exports.csv.delimiter`
- `exports.csv.enclosure`
- `exports.csv.line_ending`
- `exports.csv.use_bom`
- `exports.csv.include_separator_line`
- `exports.csv.excel_compatibility`
- `exports.csv.output_encoding`
- `exports.csv.test_auto_detect`
- `exports.properties.*`
- `imports.read_only`
- `imports.ignore_empty`
- `imports.heading_row.formatter`
- `imports.csv.delimiter`
- `imports.csv.enclosure`
- `imports.csv.escape_character`
- `imports.csv.contiguous`
- `imports.csv.input_encoding`
- `imports.properties.*`
- `imports.cells.middleware`
- `extension_detector`
- `value_binder.default`
- `cache.driver`
- `cache.batch.memory_limit`
- `cache.illuminate.store`
- `cache.default_ttl`
- `transactions.handler`
- `transactions.db.connection`
- `temporary_files.local_path`
- `temporary_files.local_permissions`
- `temporary_files.remote_disk`
- `temporary_files.remote_prefix`
- `temporary_files.force_resync_remote`
## Cache, Transactions, Files, And Cell Middleware
- Cache drivers: `memory`, `illuminate`, `batch`
- Cache classes: `CacheManager`, `MemoryCache`, `BatchCache`
- Transactions: `TransactionManager`, `DbTransactionHandler`, `NullTransactionHandler`
- Temporary files: `TemporaryFileFactory`, `LocalTemporaryFile`, `RemoteTemporaryFile`
- Filesystem disk wrapper: `Files\Disk`, `Files\Filesystem`
- Cell middleware: `TrimCellValue`, `ConvertEmptyCellValuesToNull`, and custom `CellMiddleware`
- Value binders: package default binder, PhpSpreadsheet string binder, PhpSpreadsheet advanced binder, custom `WithCustomValueBinder`
## Testing And Fakes
- `Excel::fake()`
- `Excel::assertDownloaded($fileName, $callback = null)`
- `Excel::assertStored($filePath, $disk = null, $callback = null)`
- `Excel::assertQueued($filePath, $disk = null, $callback = null)`
- `Excel::assertQueuedWithChain($chain)`
- `Excel::assertExportedInRaw($className, $callback = null)`
- `Excel::assertImported($filePath, $disk = null, $callback = null)`
- `Excel::matchByRegex()`
- `Excel::doNotMatchByRegex()`
- Use real file reads through PhpSpreadsheet when cell values, sheets, formatting, formulas, drawings, or charts must be verified.
## Maintenance Map
- Concern changes: update matching `tests/Concerns/*Test.php`.
- Facade/fake changes: update `tests/ExcelFakeTest.php`.
- Queue changes: update `tests/QueuedExportTest.php`, `tests/QueuedImportTest.php`, `tests/QueuedQueryExportTest.php`, or `tests/QueuedViewExportTest.php`.
- Macro changes: update `tests/Mixins/*Test.php`.
- Validation changes: update `tests/Validators/RowValidatorTest.php`.
- Cache changes: update `tests/Cache/BatchCacheTest.php`.
- Service provider changes: update `tests/ExcelServiceProviderTest.php`.
- PhpSpreadsheet compatibility changes: update `tests/PhpSpreadsheetV5CompatibilityTest.php`.
Use this file as the completeness checklist for maatwebsite/excel. If a user asks for "all features", compare the task against every section here.
maatwebsite/excelMaatwebsite\ExcelMaatwebsite\Excel\ExcelServiceProviderMaatwebsite\Excel\Facades\Excelconfig/excel.phpsrc/Concerns/src/Console/tests/Excel::download($export, $fileName, $writerType = null, $headers = [])Excel::store($export, $filePath, $disk = null, $writerType = null, $diskOptions = [])Excel::queue($export, $filePath, $disk = null, $writerType = null, $diskOptions = [])Excel::raw($export, $writerType)Excel::import($import, $filePath, $disk = null, $readerType = null)Excel::queueImport($import, $filePath, $disk = null, $readerType = null)Excel::toArray($import, $filePath, $disk = null, $readerType = null)Excel::toCollection($import, $filePath, $disk = null, $readerType = null)Maatwebsite\Excel\ExporterMaatwebsite\Excel\ImporterExcel::XLSXExcel::CSVExcel::TSVExcel::ODSExcel::XLSExcel::SLKExcel::XMLExcel::GNUMERICExcel::HTMLExcel::MPDFExcel::DOMPDFExcel::TCPDFconfig('excel.extension_detector')NoTypeDetectedException when detection cannot resolve a writer/reader typeFromArray: rows from array()FromCollection: rows from collection()FromGenerator: rows from generator()FromIterator: rows from iterator()FromQuery: chunked query export from Eloquent, query builder, or relationFromScout: export from Laravel Scout builderFromView: export a Blade view/tableExportable: object-level download(), store(), queue(), raw(), and responsable supportWithHeadings: prepend heading rowsWithMapping: transform each source row before writingWithColumnFormatting: PhpSpreadsheet number/date formatsWithColumnWidths: fixed column widthsShouldAutoSize: auto-size columnsWithStyles: style a worksheet directlyWithDefaultStyles: workbook default stylesWithBackgroundColor: workbook background colorWithEvents: register event listeners manuallyRegistersEventListeners: auto-register static event listener methodsWithProperties: workbook document propertiesWithTitle: worksheet titleWithCustomStartCell: start export output at a custom cellWithStrictNullComparison: preserve empty string/null distinctionsWithPreCalculateFormulas: pre-calculate formulas before writingWithCharts: attach PhpSpreadsheet chartsWithDrawings: attach PhpSpreadsheet drawings/imagesWithMultipleSheets: build multi-sheet workbooksWithConditionalSheets: expose optional sheet subsets through onlySheets()HasReferencesToOtherSheets: mark formulas/references that cross sheetsWithCustomCsvSettings: per-export CSV settingsMapsCsvSettings: maps package CSV settings onto PhpSpreadsheet CSV writers/readersWithCustomChunkSize: override export chunk sizeWithCustomQuerySize: override query size estimation for queued query exportsWithProgressBar: write progress to console outputWithColumnLimit: limit exported columns through an end columnToModel: convert each row to an Eloquent model, model array, or nullToCollection: handle rows as a Laravel collectionToArray: handle rows as arraysOnEachRow: process a Row object one row at a timeWithMappedCells: map specific cells to named array keysImportable: object-level import(), queue(), toArray(), toCollection(), and console output supportWithHeadingRow: use a heading row for keysWithGroupedHeadingRow: group duplicate heading namesWithStartRow: choose first data rowWithLimit: limit number of read rowsWithColumnLimit: limit read columns through an end columnWithReadFilter: use a PhpSpreadsheet read filterWithCalculatedFormulas: read calculated formula resultsWithFormatData: read formatted valuesWithCustomCsvSettings: per-import CSV settingsWithCustomValueBinder: custom PhpSpreadsheet value bindingSkipsEmptyRows: skip empty rowsSkipsUnknownSheets: handle sheet names/indexes that do not existRemembersRowNumber: inspect current row number during importRemembersChunkOffset: inspect current chunk offset during chunked importWithValidation: row validation rulesSkipsOnFailure: handle validation failures without abortingSkipsFailures: collect failures through failures()SkipsOnError: handle thrown row errors without abortingSkipsErrors: collect errors through errors()WithBatchInserts: batch model insertsWithUpserts: upsert by uniqueBy()WithUpsertColumns: select columns updated during upsertWithSkipDuplicates: skip duplicate rows during insert/upsert flowsPersistRelations: persist model relations from import rowsValidationExceptionFailureRowSkippedExceptionIlluminate\Contracts\Queue\ShouldQueue for queued exports/imports.Maatwebsite\Excel\Concerns\ShouldBatch when queue operations should return a pending batch.Maatwebsite\Excel\Concerns\ShouldQueueWithoutChain for queued imports without job chaining.QueueExport, AppendDataToSheet, AppendQueryToSheet, AppendPaginatedToSheet, AppendViewToSheet, CloseSheet, and StoreQueuedExport.QueueImport, ReadChunk, AfterImportJob, AfterBatch, AfterChunk, and ProxyFailures.Jobs\Middleware\LocalizeJob preserves locale preferences for queued work.BeforeExportBeforeWritingBeforeSheetAfterSheetBeforeImportAfterImportAfterChunkAfterBatchImportFailedEvent and HasEventBusphp artisan make:export ExportNamephp artisan make:export ExportName --model=Userphp artisan make:export ExportName --queryphp artisan make:export ExportName --model=User --queryphp artisan make:import ImportNamephp artisan make:import ImportName --model=Userstubs publish tag.config publish tag.DownloadCollectionMixinStoreCollectionMixinDownloadQueryMacroStoreQueryMacroImportMacroImportAsMacroCollection::downloadExcel($fileName, $writerType = null, $withHeadings = false, $responseHeaders = [])Collection::storeExcel($filePath, $disk = null, $writerType = null, $withHeadings = false)Builder::downloadExcel($fileName, $writerType = null, $withHeadings = false)Builder::storeExcel($filePath, $disk = null, $writerType = null, $withHeadings = false)Builder::import($filename, $disk = null, $readerType = null)Builder::importAs($filename, callable $mapping, $disk = null, $readerType = null)exports.chunk_sizeexports.pre_calculate_formulasexports.strict_null_comparisonexports.csv.delimiterexports.csv.enclosureexports.csv.line_endingexports.csv.use_bomexports.csv.include_separator_lineexports.csv.excel_compatibilityexports.csv.output_encodingexports.csv.test_auto_detectexports.properties.*imports.read_onlyimports.ignore_emptyimports.heading_row.formatterimports.csv.delimiterimports.csv.enclosureimports.csv.escape_characterimports.csv.contiguousimports.csv.input_encodingimports.properties.*imports.cells.middlewareextension_detectorvalue_binder.defaultcache.drivercache.batch.memory_limitcache.illuminate.storecache.default_ttltransactions.handlertransactions.db.connectiontemporary_files.local_pathtemporary_files.local_permissionstemporary_files.remote_disktemporary_files.remote_prefixtemporary_files.force_resync_remotememory, illuminate, batchCacheManager, MemoryCache, BatchCacheTransactionManager, DbTransactionHandler, NullTransactionHandlerTemporaryFileFactory, LocalTemporaryFile, RemoteTemporaryFileFiles\Disk, Files\FilesystemTrimCellValue, ConvertEmptyCellValuesToNull, and custom CellMiddlewareWithCustomValueBinderExcel::fake()Excel::assertDownloaded($fileName, $callback = null)Excel::assertStored($filePath, $disk = null, $callback = null)Excel::assertQueued($filePath, $disk = null, $callback = null)Excel::assertQueuedWithChain($chain)Excel::assertExportedInRaw($className, $callback = null)Excel::assertImported($filePath, $disk = null, $callback = null)Excel::matchByRegex()Excel::doNotMatchByRegex()tests/Concerns/*Test.php.tests/ExcelFakeTest.php.tests/QueuedExportTest.php, tests/QueuedImportTest.php, tests/QueuedQueryExportTest.php, or tests/QueuedViewExportTest.php.tests/Mixins/*Test.php.tests/Validators/RowValidatorTest.php.tests/Cache/BatchCacheTest.php.tests/ExcelServiceProviderTest.php.tests/PhpSpreadsheetV5CompatibilityTest.php.How can I help you explore Laravel packages today?