v2.0.0 2024-03-11 07:09 UTC

This package is auto-updated.

Last update: 2024-07-11 08:19:19 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