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.
- mixed[]
$row- An array of scalars.
Throws: \Quorum\Exporter\Exceptions\InvalidDataTypeException
function addRows($dataSet): voidAppend multiple rows of data to the end of the Worksheet.
- iterable<mixed[]>
$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.