lekoala / silverstripe-excel-import-export
Replace CSV with Excel in SilverStripe
Installs: 6 400
Dependents: 2
Suggesters: 1
Security: 0
Stars: 9
Watchers: 3
Forks: 11
Open Issues: 0
Type:silverstripe-vendormodule
pkg:composer/lekoala/silverstripe-excel-import-export
Requires
- php: ^8.3
- lekoala/spread-compat: ^0.9.8
- silverstripe/framework: ^6
- silverstripe/recipe-plugin: ^2
- silverstripe/vendor-plugin: ^3
Requires (Dev)
- openspout/openspout: ^4
- phpoffice/phpspreadsheet: ^1.26
- phpunit/phpunit: ^11.5
- silverstripe/admin: ^3
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2025-09-26 11:17:16 UTC
README
Intro
Add import/export functionalities in xlsx format.
Also replace built in csv import/export to have the same consistent behaviour.
Excel support is provided by spread-compat package which can use under the hood simple xlsx, php spreadsheet or openspout.
These changes apply automatically to SecurityAdmin and ModelAdmin through extension.
To make import easier, import specs are replaced by a sample file that is ready to use for the user.
This import file can be further customised by implementing sampleImportData that should return an array of rows.
Choosing your adapter
You can choose your preferred adapter in yml. Accepted values are:
- csv: PhpSpreadsheet,OpenSpout,League,Native
- xlsx: PhpSpreadsheet,OpenSpout,Simple,Native
LeKoala\ExcelImportExport\ExcelImportExport: preferred_csv_adapter: 'Native' preferred_xlsx_adapter: 'Native'
Configure exported fields
All fields are exported by default (not just summary fields that are useless by themselves)
If you want to restrict the fields, you can either:
- Implement a
exportedFieldsmethod on your model that should return an array of fields - Define a
exported_fieldsconfig field on your model that will restrict the list to these fields - Define a
unexported_fieldsconfig field on your model that will blacklist these fields from being exported
Custom import handlers
If you define a listImportHandlers you can define a list of custom handlers that your user can choose instead
of the default process.
These handler may or may not enable the onlyUpdate feature that will prevent creating new records. This
needs to be handled in your own import classes by adding a setOnlyUpdate method.
This require some custom code on your ModelAdmin class that could look like this
public function import($data, $form, $request) { if (!ExcelImportExport::checkImportForm($this)) { return false; } $handler = $data['ImportHandler'] ?? null; if ($handler == "default") { return parent::import($data, $form, $request); } return ExcelImportExport::useCustomHandler($handler, $form, $this); }
The import handlers only need to implement a load method that needs to return a result string
or a BulkLoader_Result object.
These custom handlers can have a custom description and a custom sample file:
public static function getImportDescription() { return "This is my custom description"; } public static function getSampleFileLink() { return ExcelImportExport::createDownloadSampleLink(__CLASS__); } public static function getSampleFile() { $data = []; // TODO ExcelImportExport::createSampleFile($data, __CLASS__); }
Compatibility
Tested with ^5 and up
Maintainer
LeKoala - thomas@lekoala.be