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]) : void
Add 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]) : void
Trigger 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() : ?string
Get the name of the sheet. Use thereof is Engine Specific
function addRow(array $row) : void
Append 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) : void
Append multiple rows of data to the end of the Worksheet.
- array | \Iterator
$dataSet
- An iterable of arrays of scalars.
function current() : ?array
Return the current value
function next() : void
Move forward to next element
function key() : int
Return the key of the current element
function valid() : bool
Checks if current position is valid
function rewind() : void
Rewind 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) : void
Character to use as CSV value enclosure. Commonly this will be "
function setTmpDir(string $tmpDir) : void
Set the tmpDir to write interim files to.
Defaults to sys_get_temp_dir
function getMultiSheetStrategy() : string
Get the current strategy for Multi-Sheet export
function setMultiSheetStrategy(string $multiSheetStrategy) : void
Set the strategy for allowing multiple sheets.
Supported strategies are CsvEngine::STRATEGY_ZIP
and CsvEngine::STRATEGY_CONCAT
CsvEngine::STRATEGY_ZIP
will output a single zipfile containing every sheet as a separate CSV file.CsvEngine::STRATEGY_CONCAT
will output a single CSV file with every sheet one after the next.
- string
$multiSheetStrategy
- Use the constantCsvEngine::STRATEGY_ZIP
orCsvEngine::STRATEGY_CONCAT
function getDelimiter() : string
Gets delimiter. If unset, UTF-16 and UTF-32 default to TAB "\t", everything else to COMMA ","
function setDelimiter(?string $delimiter) : void
Sets 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() : string
Get the current character used for enclosure.
function disableBom([ bool $disable = true]) : void
Whether 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.