maj traitement des dates
This commit is contained in:
parent
8258dd53b5
commit
ed34b1e093
@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace nulib\ext\spout;
|
namespace nulib\ext\spout;
|
||||||
|
|
||||||
|
use DateTimeInterface;
|
||||||
use nulib\cl;
|
use nulib\cl;
|
||||||
use nulib\file\tab\AbstractBuilder;
|
use nulib\file\tab\AbstractBuilder;
|
||||||
use nulib\file\tab\TAbstractBuilder;
|
use nulib\file\tab\TAbstractBuilder;
|
||||||
@ -23,9 +24,9 @@ use OpenSpout\Writer\XLSX\Entity\SheetView;
|
|||||||
class SpoutBuilder extends AbstractBuilder {
|
class SpoutBuilder extends AbstractBuilder {
|
||||||
use TAbstractBuilder;
|
use TAbstractBuilder;
|
||||||
|
|
||||||
const DATE_FORMAT = "mm/dd/yyyy";
|
const DATE_FORMAT = "dd/mm/yyyy";
|
||||||
|
|
||||||
const DATETIME_FORMAT = "mm/dd/yyyy hh:mm:ss";
|
const DATETIME_FORMAT = "dd/mm/yyyy hh:mm:ss";
|
||||||
|
|
||||||
/** @var bool faut-il choisir le type numérique pour une chaine numérique? */
|
/** @var bool faut-il choisir le type numérique pour une chaine numérique? */
|
||||||
const TYPE_NUMERIC = true;
|
const TYPE_NUMERIC = true;
|
||||||
@ -78,6 +79,7 @@ class SpoutBuilder extends AbstractBuilder {
|
|||||||
protected static function set_defaults(?array &$params, string $key, array $defaults): void {
|
protected static function set_defaults(?array &$params, string $key, array $defaults): void {
|
||||||
if ($params !== null && array_key_exists($key, $params)) {
|
if ($params !== null && array_key_exists($key, $params)) {
|
||||||
if ($params[$key] === false) $params[$key] = null;
|
if ($params[$key] === false) $params[$key] = null;
|
||||||
|
else $params[$key] ??= $defaults;
|
||||||
} else {
|
} else {
|
||||||
$params[$key] ??= $defaults;
|
$params[$key] ??= $defaults;
|
||||||
}
|
}
|
||||||
@ -135,12 +137,16 @@ class SpoutBuilder extends AbstractBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch ($ssType) {
|
switch ($ssType) {
|
||||||
|
case "ods":
|
||||||
case self::SS_TYPE_ODS:
|
case self::SS_TYPE_ODS:
|
||||||
$ss = WriterEntityFactory::createODSWriter();
|
$ss = WriterEntityFactory::createODSWriter();
|
||||||
|
$ssType = self::SS_TYPE_ODS;
|
||||||
break;
|
break;
|
||||||
|
case "xlsx":
|
||||||
case self::SS_TYPE_XLSX:
|
case self::SS_TYPE_XLSX:
|
||||||
default:
|
default:
|
||||||
$ss = WriterEntityFactory::createXLSXWriter();
|
$ss = WriterEntityFactory::createXLSXWriter();
|
||||||
|
$ssType = self::SS_TYPE_XLSX;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$ss->setDefaultColumnWidth(10.5);
|
$ss->setDefaultColumnWidth(10.5);
|
||||||
@ -158,7 +164,7 @@ class SpoutBuilder extends AbstractBuilder {
|
|||||||
$this->setSheet($params["wsname"] ?? static::WSNAME, $sheetParams);
|
$this->setSheet($params["wsname"] ?? static::WSNAME, $sheetParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
const SS_TYPE_ODS = 0, SS_TYPE_XLSX = 1;
|
const SS_TYPE_ODS = 1, SS_TYPE_XLSX = 2;
|
||||||
|
|
||||||
/** @var int type de fichier généré */
|
/** @var int type de fichier généré */
|
||||||
protected int $ssType;
|
protected int $ssType;
|
||||||
@ -214,10 +220,10 @@ class SpoutBuilder extends AbstractBuilder {
|
|||||||
case self::SS_TYPE_XLSX:
|
case self::SS_TYPE_XLSX:
|
||||||
# appliquer les paramètres de la feuille
|
# appliquer les paramètres de la feuille
|
||||||
$this->apply_params($ss, $sheetParams, ref_params_xlsx::SHEET);
|
$this->apply_params($ss, $sheetParams, ref_params_xlsx::SHEET);
|
||||||
# appliquer les paramètres de la vue de la feuille
|
$this->ensure_style($sheetParams["default_style"]);
|
||||||
$sheetViewParams =& $sheetParams["view"];
|
$this->ensure_style($sheetParams["header_style"]);
|
||||||
$sheetViewParams["->setFreezeRow"] ??= 2;
|
$this->ensure_style($sheetParams["odd_style"]);
|
||||||
$ws->setSheetView($this->apply_params(new SheetView(), $sheetViewParams, ref_params_xlsx::SHEET_VIEW));
|
$this->ensure_style($sheetParams["even_style"]);
|
||||||
self::set_defaults($sheetParams, "header_style", [
|
self::set_defaults($sheetParams, "header_style", [
|
||||||
"font" => ["bold" => true],
|
"font" => ["bold" => true],
|
||||||
"bg_color" => "gray",
|
"bg_color" => "gray",
|
||||||
@ -225,10 +231,10 @@ class SpoutBuilder extends AbstractBuilder {
|
|||||||
self::set_defaults($sheetParams, "even_style", [
|
self::set_defaults($sheetParams, "even_style", [
|
||||||
"bg_color" => "light_gray",
|
"bg_color" => "light_gray",
|
||||||
]);
|
]);
|
||||||
$this->ensure_style($sheetParams["default_style"]);
|
# appliquer les paramètres de la vue de la feuille
|
||||||
$this->ensure_style($sheetParams["header_style"]);
|
$sheetViewParams =& $sheetParams["view"];
|
||||||
$this->ensure_style($sheetParams["odd_style"]);
|
$sheetViewParams["->setFreezeRow"] ??= 2;
|
||||||
$this->ensure_style($sheetParams["even_style"]);
|
$ws->setSheetView($this->apply_params(new SheetView(), $sheetViewParams, ref_params_xlsx::SHEET_VIEW));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$this->sheetParams = $sheetParams;
|
$this->sheetParams = $sheetParams;
|
||||||
@ -266,7 +272,15 @@ class SpoutBuilder extends AbstractBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected function isDate(&$value, &$style): bool {
|
protected function isDate(&$value, &$style): bool {
|
||||||
if (CellTypeHelper::isDateTimeOrDateInterval($value)) {
|
if ($value instanceof Date) {
|
||||||
|
$style ??= new Style();
|
||||||
|
$style->setFormat(self::DATE_FORMAT);
|
||||||
|
return true;
|
||||||
|
} elseif ($value instanceof DateTime) {
|
||||||
|
$style ??= new Style();
|
||||||
|
$style->setFormat(self::DATETIME_FORMAT);
|
||||||
|
return true;
|
||||||
|
} elseif (CellTypeHelper::isDateTimeOrDateInterval($value)) {
|
||||||
$style ??= new Style();
|
$style ??= new Style();
|
||||||
$style->setFormat(self::DATE_FORMAT);
|
$style->setFormat(self::DATE_FORMAT);
|
||||||
return true;
|
return true;
|
||||||
@ -289,10 +303,10 @@ class SpoutBuilder extends AbstractBuilder {
|
|||||||
|
|
||||||
function _write(array $row, ?array $colsStyle=null, ?array $rowStyle=null): void {
|
function _write(array $row, ?array $colsStyle=null, ?array $rowStyle=null): void {
|
||||||
$sheetParams = $this->sheetParams;
|
$sheetParams = $this->sheetParams;
|
||||||
$defaultStyle = $sheetParams["default_style"];
|
$defaultStyle = $sheetParams["default_style"] ?? null;
|
||||||
$headerStyle = $sheetParams["header_style"];
|
$headerStyle = $sheetParams["header_style"] ?? null;
|
||||||
$oddStyle = $sheetParams["odd_style"];
|
$oddStyle = $sheetParams["odd_style"] ?? null;
|
||||||
$evenStyle = $sheetParams["even_style"];
|
$evenStyle = $sheetParams["even_style"] ?? null;
|
||||||
|
|
||||||
$cells = [];
|
$cells = [];
|
||||||
foreach ($row as $key => $col) {
|
foreach ($row as $key => $col) {
|
||||||
@ -319,6 +333,7 @@ class SpoutBuilder extends AbstractBuilder {
|
|||||||
$rowStyle ??= $oddStyle;
|
$rowStyle ??= $oddStyle;
|
||||||
}
|
}
|
||||||
$rowStyle ??= $defaultStyle;
|
$rowStyle ??= $defaultStyle;
|
||||||
|
self::ensure_style($rowStyle);
|
||||||
$this->ss->addRow(WriterEntityFactory::createRow($cells, $rowStyle));
|
$this->ss->addRow(WriterEntityFactory::createRow($cells, $rowStyle));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user