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
namespace nulib\ext\spout;
use DateTimeInterface;
use nulib\cl;
use nulib\file\tab\AbstractBuilder;
use nulib\file\tab\TAbstractBuilder;
@ -23,9 +24,9 @@ use OpenSpout\Writer\XLSX\Entity\SheetView;
class SpoutBuilder extends AbstractBuilder {
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? */
const TYPE_NUMERIC = true;
@ -78,6 +79,7 @@ class SpoutBuilder extends AbstractBuilder {
protected static function set_defaults(?array &$params, string $key, array $defaults): void {
if ($params !== null && array_key_exists($key, $params)) {
if ($params[$key] === false) $params[$key] = null;
else $params[$key] ??= $defaults;
} else {
$params[$key] ??= $defaults;
}
@ -135,12 +137,16 @@ class SpoutBuilder extends AbstractBuilder {
}
}
switch ($ssType) {
case "ods":
case self::SS_TYPE_ODS:
$ss = WriterEntityFactory::createODSWriter();
$ssType = self::SS_TYPE_ODS;
break;
case "xlsx":
case self::SS_TYPE_XLSX:
default:
$ss = WriterEntityFactory::createXLSXWriter();
$ssType = self::SS_TYPE_XLSX;
break;
}
$ss->setDefaultColumnWidth(10.5);
@ -158,7 +164,7 @@ class SpoutBuilder extends AbstractBuilder {
$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é */
protected int $ssType;
@ -214,10 +220,10 @@ class SpoutBuilder extends AbstractBuilder {
case self::SS_TYPE_XLSX:
# appliquer les paramètres de la feuille
$this->apply_params($ss, $sheetParams, ref_params_xlsx::SHEET);
# appliquer les paramètres de la vue de la feuille
$sheetViewParams =& $sheetParams["view"];
$sheetViewParams["->setFreezeRow"] ??= 2;
$ws->setSheetView($this->apply_params(new SheetView(), $sheetViewParams, ref_params_xlsx::SHEET_VIEW));
$this->ensure_style($sheetParams["default_style"]);
$this->ensure_style($sheetParams["header_style"]);
$this->ensure_style($sheetParams["odd_style"]);
$this->ensure_style($sheetParams["even_style"]);
self::set_defaults($sheetParams, "header_style", [
"font" => ["bold" => true],
"bg_color" => "gray",
@ -225,10 +231,10 @@ class SpoutBuilder extends AbstractBuilder {
self::set_defaults($sheetParams, "even_style", [
"bg_color" => "light_gray",
]);
$this->ensure_style($sheetParams["default_style"]);
$this->ensure_style($sheetParams["header_style"]);
$this->ensure_style($sheetParams["odd_style"]);
$this->ensure_style($sheetParams["even_style"]);
# appliquer les paramètres de la vue de la feuille
$sheetViewParams =& $sheetParams["view"];
$sheetViewParams["->setFreezeRow"] ??= 2;
$ws->setSheetView($this->apply_params(new SheetView(), $sheetViewParams, ref_params_xlsx::SHEET_VIEW));
break;
}
$this->sheetParams = $sheetParams;
@ -266,7 +272,15 @@ class SpoutBuilder extends AbstractBuilder {
}
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->setFormat(self::DATE_FORMAT);
return true;
@ -289,10 +303,10 @@ class SpoutBuilder extends AbstractBuilder {
function _write(array $row, ?array $colsStyle=null, ?array $rowStyle=null): void {
$sheetParams = $this->sheetParams;
$defaultStyle = $sheetParams["default_style"];
$headerStyle = $sheetParams["header_style"];
$oddStyle = $sheetParams["odd_style"];
$evenStyle = $sheetParams["even_style"];
$defaultStyle = $sheetParams["default_style"] ?? null;
$headerStyle = $sheetParams["header_style"] ?? null;
$oddStyle = $sheetParams["odd_style"] ?? null;
$evenStyle = $sheetParams["even_style"] ?? null;
$cells = [];
foreach ($row as $key => $col) {
@ -319,6 +333,7 @@ class SpoutBuilder extends AbstractBuilder {
$rowStyle ??= $oddStyle;
}
$rowStyle ??= $defaultStyle;
self::ensure_style($rowStyle);
$this->ss->addRow(WriterEntityFactory::createRow($cells, $rowStyle));
}