support de merge_cells dans rowParams

This commit is contained in:
Jephté Clain 2025-01-24 18:05:49 +04:00
parent 51ebba1ab7
commit 1d2d8686c4
2 changed files with 19 additions and 3 deletions

View File

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

View File

@ -45,8 +45,9 @@ class ref_builder {
const PARAMS_SHEET_VIEW = [];
const ROW = [
const ROW_PARAMS = [
"->setHeight" => ["float"],
"merge_cells" => "array",
];
const COLORS = [