maj traitement des dates
This commit is contained in:
parent
8258dd53b5
commit
ed34b1e093
@ -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));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user