Exporter
, (*1)
A Streamed Data Export Tool, (*2)
Supported formats:
- CSV / TSV
- SpreadsheetML "Excel 2004 XML Spreadsheet"
- More to come., (*3)
Requirements
-
maennchen/zipstream-php: ~2.1
-
ext-SPL: *
-
ext-mbstring: *
-
ext-dom: *
-
ext-json: *
-
php: >=7.4
Installing
Install the latest version with:, (*4)
composer require 'quorum/exporter'
Example
Simple CSV Export
<?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();
Documentation
Class: \Quorum\Exporter\DataExport
Method: DataExport->__construct
function __construct(\Quorum\Exporter\EngineInterface $engine)
DataExport is the object used to orchestrate the export process regardless of export format., (*5)
Parameters:
-
\Quorum\Exporter\EngineInterface
$engine - The engine by which to export the data sheets.
Method: DataExport->addSheet
function addSheet(\Quorum\Exporter\DataSheet $sheet [, ?string $sheetTitle = null]) : void
Add a Data Sheet to the export., (*6)
Parameters:
-
\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.
Method: DataExport->export
function export([ $outputStream = null]) : void
Trigger the final export process., (*7)
Parameters:
-
resource | null
$outputStream - The stream resource to export to.
NULL will open a php://output resource.
Class: \Quorum\Exporter\DataSheet
Method: DataSheet->__construct
function __construct([ ?string $name = null])
DataSheet is the representation of a Worksheet, (*8)
Parameters:
-
string | null
$name - The name to give the sheet. The use is Engine implementation specific but is likely
filename or Sheet name
Method: DataSheet->getName
function getName() : ?string
Get the name of the sheet. Use thereof is Engine Specific, (*9)
Method: DataSheet->addRow
function addRow(array $row) : void
Append a row worth of data to the end of the Worksheet., (*10)
Parameters:
-
array
$row - An array of scalars.
Throws: \Quorum\Exporter\Exceptions\InvalidDataTypeException, (*11)
Method: DataSheet->addRows
function addRows($dataSet) : void
Append multiple rows of data to the end of the Worksheet., (*12)
Parameters:
-
array | \Iterator
$dataSet - An iterable of arrays of scalars.
Method: DataSheet->current
function current() : ?array
Return the current value, (*13)
Method: DataSheet->next
function next() : void
Move forward to next element, (*14)
Method: DataSheet->key
function key() : int
Return the key of the current element, (*15)
Method: DataSheet->valid
function valid() : bool
Checks if current position is valid, (*16)
Method: DataSheet->rewind
function rewind() : void
Rewind the Iterator to the first element, (*17)
Class: \Quorum\Exporter\EngineInterface
Class: \Quorum\Exporter\Engines\CsvEngine
<?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';
}
Method: CsvEngine->__construct
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., (*18)
While this may seem like an odd choice, the reason for this is cross platform Microsoft Excel compatibility., (*19)
You can read more on the topic here
- https://donatstudios.com/CSV-An-Encoding-Nightmare
Parameters:
-
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.
Method: CsvEngine->setEnclosure
function setEnclosure(string $enclosure) : void
Character to use as CSV value enclosure. Commonly this will be ", (*20)
Method: CsvEngine->setTmpDir
function setTmpDir(string $tmpDir) : void
Set the tmpDir to write interim files to., (*21)
Defaults to sys_get_temp_dir, (*22)
Method: CsvEngine->getMultiSheetStrategy
function getMultiSheetStrategy() : string
Get the current strategy for Multi-Sheet export, (*23)
Method: CsvEngine->setMultiSheetStrategy
function setMultiSheetStrategy(string $multiSheetStrategy) : void
Set the strategy for allowing multiple sheets., (*24)
Supported strategies are CsvEngine::STRATEGY_ZIP and CsvEngine::STRATEGY_CONCAT, (*25)
-
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.
Parameters:
-
string
$multiSheetStrategy - Use the constant CsvEngine::STRATEGY_ZIP or CsvEngine::STRATEGY_CONCAT
Method: CsvEngine->getDelimiter
function getDelimiter() : string
Gets delimiter. If unset, UTF-16 and UTF-32 default to TAB "\t", everything else to COMMA ",", (*26)
Method: CsvEngine->setDelimiter
function setDelimiter(?string $delimiter) : void
Sets delimiter. Setting to NULL triggers automatic delimiter decision based on recommended encoding rules., (*27)
Parameters:
-
string | null
$delimiter - Delimiter Character. Must be a single byte.
Method: CsvEngine->getEnclosure
function getEnclosure() : string
Get the current character used for enclosure., (*28)
Method: CsvEngine->disableBom
function disableBom([ bool $disable = true]) : void
Whether to disable the leading Byte Order Mark for the given encoding from being output., (*29)
Class: \Quorum\Exporter\Engines\SpreadsheetMLEngine
Method: SpreadsheetMLEngine->setCreatedTime
function setCreatedTime(?int $createdTime) : void
Parameters:
-
int | null
$createdTime - The timestamp to use for the created time. If null, the current time will be used.
Class: \Quorum\Exporter\Exceptions\ExportException
Class: \Quorum\Exporter\Exceptions\InvalidDataTypeException
Class: \Quorum\Exporter\Exceptions\OutputException
Class: \Quorum\Exporter\Exceptions\WritableException