Silverstripe module offering DataFormatters to export DataObjects in Excel format.
This Silverstripe module makes it easy to export a set of Silverstripe DataObjects to:
This module is built by extending the standard SilverStripe DataFormatter.
Install the module through composer:
composer require firebrandhq/silverstripe-excel-export
There's 3 ways you can export your data to a spread sheet.
3 DataFormatters are provided:
You can manually instantiate them to convert a list of DataObjects or a single DataObject.
$formatter = new ExcelDataFormatter(); // Will return an Excel Spreadsheet as a string for a single user $filedata = $formatter->convertDataObject($user); // Will return an Excel Spreadsheet as a string for a list of user $filedata = $formatter->convertDataObjectSet(Member::get());
convertDataObject() will automatically set the Content-Type HTTP header to an appropriate Mime Type.
You can also retrieve the underlying PHPExcel object and export your DataObject set to whatever format supported by PHPExcel.
// Get your Data $formatter = new ExcelDataFormatter(); $excel = $formatter->getPhpExcelObject(SiteTree::get()); // Set up a writer $writer = PHPExcel_IOFactory::createWriter($excel, 'HTML'); // Save the file somewhere on the server $writer->save('/tmp/sitetree_list.html'); // Output the results back to the browser $writer->save('php://output'); // Output the file to a variable ob_start(); $writer->save('php://output'); $fileData = ob_get_clean();
GridFieldExcelExportButton allows your CMS users to easily export the data from a GridField to a spreadsheet.
$rowEntryConfig = GridFieldConfig_RecordEditor::create(); $rowEntryConfig->addComponent(new GridFieldExcelExportButton()); $rowEntryDataGridField = new GridField( "ContentRow", "Content Row Entry", $this->ContentRow(), $rowEntryConfig ); $fields->addFieldToTab('Root.Main', $rowEntryDataGridField);
The above code snippet will display a split button allowing the user to export the GridField list to the format of their choice.
Unlike the SilverStripe GridFieldExportButton, the
GridFieldExcelExportButton will export all the fields of the provided DataObjects ... not just the summary fields.
You can also use the
GridFieldExcelExportAction component. This button is added to each row and allows you to export individual records one at a time. Out of the box,
GridFieldExcelExportAction will export to xlsx, but you can get it to export to xls or csv (e.g.:
GridFieldExcelExportButton can be used in conjunction if you want to give both options to your users.
The SilverStripe RestfulServer Module allows you to turn any SilverStripe website into a RESTFul Server.
If you use the SilverStripe RestfulServer Module in conjunction with the Silverstripe Excel Export module, you'll be able to dynamically export any DataObject set just by entering the right URL in your browser.
Obviously, you don't want everyone to be able to download any data off your website. The SilverStripe RestfulServer Module will only return results for DataObject with the
$api_access property set.
private static $api_access = true;
Additionally, access to individual DataObjects is controlled by the
Exporting your data is just as easy as entering a URL.
There's 2 ways you can control the output:
ExcelDataFormatter extends DataFormatter, you can use methods like
setRemoveFields() to control what fields will be present in the spread sheet.
$formatter = new ExcelDataFormatter(); // This formatter instead of returning every field of a DataObject, will only return 3 fields. $formatter->setCustomFields(['ID', 'Title', 'LastEdited']); // If youe DataObject has dynamic properties, you can reference them using setCustomAddFields(). $formatter->setCustomAddFields(['ChildrenCount']);
You can customise the default column set that will be return for a specific DataObject class by defining a
getExcelExportFields() method on your DataOject class.
getExcelExportFields() method should return an array of fields following the same format used by
return [ 'ID' => 'Int', 'Name' => 'Varchar', 'Address' => 'Text' ];
You may also reference relationships in this array or dynamic properties:
return [ 'Owner.Name' => 'Varchar', 'Category.Title' => 'Varchar', 'ChildrenCount' => 'Int', ];
This will also allow you to control the order the fields appear in the Spread Sheet. Note that ID will always be the first field and cannot be removed.
This behavior can be overriden for specific instances of
ExcelDataFormatter by calling the
Out of the box, the actual field names will be used as column header. (e.g.:
FirstName rather than
You can customise this behavior and use the Field Labels as define on your DataObject class instead. When generating the header row,
ExcelDataFormatter will call the
fieldLabel() method on your Data Object to decide what string to use in each header.
In you YML config, you can use the following syntax to change the default headers.
ExcelDataFormatter: UseLabelsAsHeaders: true
You may change the default behavior for a specific instance.
Module rating system helping users find modules that are well supported. For more on how the rating system works visit Module standards
Score not correct? Let us know there is a problem