Data Export For PHP

v1.5.0 2022-01-19 09:29 UTC


Latest Version on Packagist Tests Total Downloads

Wrap sonata-project/exporter, make it easy and strong~


  • Simple api (use DataExporter::csv()->saveAs())
  • Quick change for different output type (csv/xlsx/xls/ods...)
  • Support a lot of source, and can use array or iterator quickly
  • Low memory usage with huge data write (use csv/xlsxSpout)
  • Low memory usage with chunk data fetch and write by chain (use GeneratorChainSourceIterator)
  • Support saveAs() and browserDownload()
  • Support do something in writing (use ObjectEvent)
  • Support control Spreadsheet and Spout Instance, for change style and others (use Extend)
  • Support Excel multi sheet write (use ExcelSheetSourceIterator)
  • Support Dynamic source (use CallableSourceIterator)


You can install the package via composer:

composer require kriss/data-export


simple Example

use \Kriss\DataExporter\DataExporter;

$source = [
    ['aaa', 'bbb', 'ccc'],
    ['aaa', 'bbb', 'ccc'],
    ['aaa', 'bbb', 'ccc'],
DataExporter::csv($source, ['showHeaders' => false])->saveAs();

Support Source

Support Writer

All Config in DataExporter::writerConfig(), see Tests

You can extend DataExporter and add Yours, see Example in Tests


Why box/spout Use

box/spout can write xlsx use stream, but phpoffice/phpspreadsheet not. phpoffice/phpspreadsheet use lots of memory when write huge data, but box/spout use few!

When use GeneratorChainSourceIterator

When you should handle huge source and need to merge them in one write.

How to build style

Use extension, see ExtendSpoutTest or ExtendSpreadsheetTest

How to write multi sheet

Use ExcelSheetSpreadsheetTrait, see ExcelSheetSourceIteratorTest


Please see CHANGELOG for more information on what has changed recently.


Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.



The MIT License (MIT). Please see License File for more information.