diff --git a/src/ext/spout/SpoutBuilder.php b/src/ext/spout/SpoutBuilder.php index f77bb80..61da982 100644 --- a/src/ext/spout/SpoutBuilder.php +++ b/src/ext/spout/SpoutBuilder.php @@ -241,6 +241,8 @@ class SpoutBuilder extends AbstractBuilder { protected int $rowStyle; + protected int $currentRow; + protected ?bool $differentOddEven = null; protected int $oddEvenIndex = 0; @@ -267,6 +269,7 @@ class SpoutBuilder extends AbstractBuilder { $this->built = false; } $this->rowStyle = self::STYLE_ROW; + $this->currentRow = 1; switch ($this->ssType) { case self::SS_TYPE_ODS: @@ -367,7 +370,9 @@ class SpoutBuilder extends AbstractBuilder { function _write(array $row, ?array $colStyles=null, ?array $rowStyle=null): void { $rowParams = null; if ($rowStyle !== null) { - foreach (array_keys(ref_builder::ROW) as $method) { + # séparer rowParams (pour configurer l'instance de $row) et $rowStyle + # (pour appliquer un style sur la ligne) + foreach (array_keys(ref_builder::ROW_PARAMS) as $method) { $value = $rowStyle[$method] ?? null; unset($rowStyle[$method]); if ($value !== null) $rowParams[$method] = $value; @@ -398,6 +403,7 @@ class SpoutBuilder extends AbstractBuilder { $cell->setType($type); $cells[] = $cell; } + if ($this->rowStyle === self::STYLE_HEADER) { $rowStyle ??= $headerStyle; } elseif ($differentOddEven && $this->oddEvenIndex % 2 == 0) { @@ -406,7 +412,16 @@ class SpoutBuilder extends AbstractBuilder { $rowStyle ??= $oddStyle; self::ensure_style($rowStyle); $row = WriterEntityFactory::createRow($cells, $rowStyle); - self::apply_params($row, $rowParams, ref_builder::ROW); + self::apply_params($row, $rowParams, ref_builder::ROW_PARAMS); + + $mergeCells = $rowParams["merge_cells"] ?? null; + if ($mergeCells !== null) { + foreach ($mergeCells as [$leftCol, $rightCol]) { + $this->mergeCells($leftCol, $this->currentRow, $rightCol, $this->currentRow); + + } + } + $this->ssWriter->addRow($row); if ($differentOddEven) $this->oddEvenIndex++; } diff --git a/src/ref/ext/spout/ref_builder.php b/src/ref/ext/spout/ref_builder.php index 11ff081..21b1fbf 100644 --- a/src/ref/ext/spout/ref_builder.php +++ b/src/ref/ext/spout/ref_builder.php @@ -45,8 +45,9 @@ class ref_builder { const PARAMS_SHEET_VIEW = []; - const ROW = [ + const ROW_PARAMS = [ "->setHeight" => ["float"], + "merge_cells" => "array", ]; const COLORS = [