A Streamed Data Export Tool
Supported formats:
- CSV / TSV
- SpreadsheetML "Excel 2004 XML Spreadsheet"
- More to come.
- maennchen/zipstream-php: ~2.1
- ext-SPL: *
- ext-mbstring: *
- ext-dom: *
- ext-json: *
- php: >=7.4
Install the latest version with:
composer require 'quorum/exporter'<?php
use Quorum\Exporter\DataExport;
use Quorum\Exporter\DataSheet;
use Quorum\Exporter\Engines\CsvEngine;
require __DIR__ . '/../vendor/autoload.php';
$csv = new CsvEngine;
$exporter = new DataExport($csv);
// Output a ZIP of CSV's for Multiple Sheets
$csv->setMultiSheetStrategy(CsvEngine::STRATEGY_ZIP);
$sheetA = new DataSheet('a');
$sheetB = new DataSheet('b');
$exporter->addSheet($sheetA);
$exporter->addSheet($sheetB);
// Add a single row at a time;
$sheetA->addRow([ 1, 2, 3 ]);
$sheetA->addRow([ "a", "b", "c" ]);
// Add Multiple Rows
$sheetB->addRows([
[ 4, 5, 6 ],
[ 7, 8, 9 ],
]);
$exporter->export();function __construct(\Quorum\Exporter\EngineInterface $engine)DataExport is the object used to orchestrate the export process regardless of export format.
- \Quorum\Exporter\EngineInterface
$engine- The engine by which to export the data sheets.
function addSheet(\Quorum\Exporter\DataSheet $sheet [, ?string $sheetTitle = null]) : voidAdd a Data Sheet to the export.
- \Quorum\Exporter\DataSheet
$sheet- The DataSheet to add to the export - string | null
$sheetTitle- Optional Title to give the data export. Most Engines will interpret this as filename (sans file extension). If excluded, the name will be left to the engine.
function export([ $outputStream = null]) : voidTrigger the final export process.
- resource | null
$outputStream- The stream resource to export to. NULL will open a php://output resource.
function __construct([ ?string $name = null])DataSheet is the representation of a Worksheet
- string | null
$name- The name to give the sheet. The use is Engine implementation specific but is likely filename or Sheet name
function getName() : ?stringGet the name of the sheet. Use thereof is Engine Specific
function addRow(array $row) : voidAppend a row worth of data to the end of the Worksheet.
- array
$row- An array of scalars.
Throws: \Quorum\Exporter\Exceptions\InvalidDataTypeException
function addRows($dataSet) : voidAppend multiple rows of data to the end of the Worksheet.
- array | \Iterator
$dataSet- An iterable of arrays of scalars.
function current() : ?arrayReturn the current value
function next() : voidMove forward to next element
function key() : intReturn the key of the current element
function valid() : boolChecks if current position is valid
function rewind() : voidRewind the Iterator to the first element
<?php
namespace Quorum\Exporter\Engines;
class CsvEngine {
public const STRATEGY_CONCAT = 'stat-concat';
public const STRATEGY_ZIP = 'stat-zip';
public const UTF8 = 'UTF-8';
public const UTF16 = 'UTF-16';
public const UTF16BE = 'UTF-16BE';
public const UTF16LE = 'UTF-16LE';
public const UTF32 = 'UTF-32';
public const UTF32BE = 'UTF-32BE';
public const UTF32LE = 'UTF-32LE';
}function __construct([ string $outputEncoding = self::UTF16LE [, ?string $delimiter = null [, string $enclosure = '"' [, string $inputEncoding = self::UTF8]]]])The default and highly recommended export format for CSV tab delimited UTF-16LE with leading Byte Order Mark.
While this may seem like an odd choice, the reason for this is cross platform Microsoft Excel compatibility.
- string
$outputEncoding- The encoding to output. Defaults to UTF-16LE as it is by far the best supported by Excel - string | null
$delimiter- Character to use as Delimiter. Default varies based on encoding. - string
$enclosure- Character to use as Enclosure. - string
$inputEncoding- The encoding of the input going into the CSVs.
function setEnclosure(string $enclosure) : voidCharacter to use as CSV value enclosure. Commonly this will be "
function setTmpDir(string $tmpDir) : voidSet the tmpDir to write interim files to.
Defaults to sys_get_temp_dir
function getMultiSheetStrategy() : stringGet the current strategy for Multi-Sheet export
function setMultiSheetStrategy(string $multiSheetStrategy) : voidSet the strategy for allowing multiple sheets.
Supported strategies are CsvEngine::STRATEGY_ZIP and CsvEngine::STRATEGY_CONCAT
CsvEngine::STRATEGY_ZIPwill output a single zipfile containing every sheet as a separate CSV file.CsvEngine::STRATEGY_CONCATwill output a single CSV file with every sheet one after the next.
- string
$multiSheetStrategy- Use the constantCsvEngine::STRATEGY_ZIPorCsvEngine::STRATEGY_CONCAT
function getDelimiter() : stringGets delimiter. If unset, UTF-16 and UTF-32 default to TAB "\t", everything else to COMMA ","
function setDelimiter(?string $delimiter) : voidSets delimiter. Setting to NULL triggers automatic delimiter decision based on recommended encoding rules.
- string | null
$delimiter- Delimiter Character. Must be a single byte.
function getEnclosure() : stringGet the current character used for enclosure.
function disableBom([ bool $disable = true]) : voidWhether to disable the leading Byte Order Mark for the given encoding from being output.
function setCreatedTime(?int $createdTime) : void- int | null
$createdTime- The timestamp to use for the created time. If null, the current time will be used.