quorum/exporter

将数据导出为电子表格

v0.2.0 2023-05-07 13:28 UTC

This package is auto-updated.

Last update: 2024-09-12 02:50:45 UTC


README

Latest Stable Version Total Downloads License ci.yml

流式数据导出工具

支持的格式

  • CSV / TSV
  • SpreadsheetML "Excel 2004 XML Spreadsheet"
  • 更多即将到来。

要求

  • maennchen/zipstream-php: ~2.1
  • ext-SPL: *
  • ext-mbstring: *
  • ext-dom: *
  • ext-json: *
  • php: >=7.4

安装

使用以下命令安装最新版本

composer require 'quorum/exporter'

示例

简单CSV导出

<?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();

文档

类:\Quorum\Exporter\DataExport

方法:DataExport->__construct

function __construct(\Quorum\Exporter\EngineInterface $engine)

DataExport对象用于协调导出过程,无论导出格式如何。

参数
  • \Quorum\Exporter\EngineInterface $engine - 用于导出数据表的引擎。

方法:DataExport->addSheet

function addSheet(\Quorum\Exporter\DataSheet $sheet [, ?string $sheetTitle = null]) : void

向导出添加数据表。

参数
  • \Quorum\Exporter\DataSheet $sheet - 要添加到导出的DataSheet
  • string | null $sheetTitle - 可选的标题,用于数据导出。大多数引擎将解释为文件名(不含文件扩展名)。如果不包含,则名称将留给引擎。

方法:DataExport->export

function export([ $outputStream = null]) : void

触发最终导出过程。

参数
  • resource | null $outputStream - 要导出的流资源。NULL将打开php://output资源。

类:\Quorum\Exporter\DataSheet

方法:DataSheet->__construct

function __construct([ ?string $name = null])

DataSheet是工作表的表示

参数
  • string | null $name - 要给工作表的名字。使用方式取决于引擎实现,可能是文件名或工作表名

方法:DataSheet->getName

function getName() : ?string

获取工作表的名称。使用方式取决于引擎

方法:DataSheet->addRow

function addRow(array $row) : void

将一行数据追加到工作表末尾。

参数
  • array $row - 一组标量。

抛出: \Quorum\Exporter\Exceptions\InvalidDataTypeException

方法:DataSheet->addRows

function addRows($dataSet) : void

将多行数据追加到工作表末尾。

参数
  • array | \Iterator $dataSet - 一个由数组标量组成的可迭代对象。

方法:DataSheet->current

function current() : ?array

返回当前值

方法:DataSheet->next

function next() : void

向前移动到下一个元素

方法:DataSheet->key

function key() : int

返回当前元素的键

方法:DataSheet->valid

function valid() : bool

检查当前位置是否有效

方法:DataSheet->rewind

function rewind() : void

将迭代器重置到第一个元素

类:\Quorum\Exporter\EngineInterface

类:\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';
}

方法:CsvEngine->__construct

function __construct([ string $outputEncoding = self::UTF16LE [, ?string $delimiter = null [, string $enclosure = '"' [, string $inputEncoding = self::UTF8]]]])

默认且强烈推荐的CSV导出格式,UTF-16LE,带有前导字节顺序标记。

虽然这看起来有些奇怪,但这样做的原因是为了与跨平台Microsoft Excel兼容。

您可以在这里了解更多关于这个主题的信息
参数
  • string $outputEncoding - 输出编码。默认为UTF-16LE,因为它是Excel支持得最好的编码
  • string | null $delimiter - 用于分隔符的字符。默认值取决于编码。
  • string $enclosure - 用于封装的字符。
  • 字符串 $inputEncoding - 输入CSV文件的编码。

方法: CsvEngine->setEnclosure

function setEnclosure(string $enclosure) : void

用作CSV值封装的字符。通常这将是 "

方法: CsvEngine->setTmpDir

function setTmpDir(string $tmpDir) : void

设置临时目录以写入临时文件。

默认为 sys_get_temp_dir

方法: CsvEngine->getMultiSheetStrategy

function getMultiSheetStrategy() : string

获取当前的多工作表导出策略。

方法: CsvEngine->setMultiSheetStrategy

function setMultiSheetStrategy(string $multiSheetStrategy) : void

设置允许多个工作表的策略。

支持的策略是 CsvEngine::STRATEGY_ZIPCsvEngine::STRATEGY_CONCAT

  • CsvEngine::STRATEGY_ZIP 将输出一个包含每个工作表作为单独CSV文件的单个ZIP文件。
  • CsvEngine::STRATEGY_CONCAT 将输出一个包含每个工作表连续排列的单个CSV文件。
参数
  • 字符串 $multiSheetStrategy - 使用常量 CsvEngine::STRATEGY_ZIPCsvEngine::STRATEGY_CONCAT

方法: CsvEngine->getDelimiter

function getDelimiter() : string

获取分隔符。如果未设置,UTF-16和UTF-32默认为TAB "\t",其他为COMMA ","

方法: CsvEngine->setDelimiter

function setDelimiter(?string $delimiter) : void

设置分隔符。设置为NULL将触发基于推荐编码规则的自动分隔符决策。

参数
  • 字符串 | null $delimiter - 分隔符字符。必须为单字节。

方法: CsvEngine->getEnclosure

function getEnclosure() : string

获取当前用作封装的字符。

方法: CsvEngine->disableBom

function disableBom([ bool $disable = true]) : void

是否禁用给定编码的起始字节顺序标记(BOM)的输出。

类: \Quorum\Exporter\Engines\SpreadsheetMLEngine

方法: SpreadsheetMLEngine->setCreatedTime

function setCreatedTime(?int $createdTime) : void
参数
  • 整型 | null $createdTime - 要使用的创建时间戳。如果为null,则使用当前时间。

类: \Quorum\Exporter\Exceptions\ExportException

类: \Quorum\Exporter\Exceptions\InvalidDataTypeException

类: \Quorum\Exporter\Exceptions\OutputException

类: \Quorum\Exporter\Exceptions\WritableException