maj traitement des dates

This commit is contained in:
Jephté Clain 2024-11-29 16:52:20 +04:00
parent 8258dd53b5
commit ed34b1e093

View File

@ -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));
} }