From b7c025a183f5f774842ad5f6f5617778781897c0 Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Thu, 22 Sep 2022 01:10:53 +0200 Subject: [PATCH] Correct update to named ranges and formulae when inserting/deleting columns/rows --- src/PhpSpreadsheet/ReferenceHelper.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/PhpSpreadsheet/ReferenceHelper.php b/src/PhpSpreadsheet/ReferenceHelper.php index 822b754a..7ae7f1de 100644 --- a/src/PhpSpreadsheet/ReferenceHelper.php +++ b/src/PhpSpreadsheet/ReferenceHelper.php @@ -539,8 +539,17 @@ class ReferenceHelper // Update workbook: define names if (count($worksheet->getParent()->getDefinedNames()) > 0) { foreach ($worksheet->getParent()->getDefinedNames() as $definedName) { - if ($definedName->getWorksheet() !== null && $definedName->getWorksheet()->getHashCode() === $worksheet->getHashCode()) { - $definedName->setValue($this->updateCellReference($definedName->getValue())); + if ($definedName->isFormula() === false) { + $asFormula = ($definedName->getValue()[0] === '=') ? '=' : ''; + if ($definedName->getWorksheet() !== null && $definedName->getWorksheet()->getHashCode() === $worksheet->getHashCode()) { + $definedName->setValue($asFormula . $this->updateCellReference(ltrim($definedName->getValue(), '='))); + } + } else { + $formula = $definedName->getValue(); + if ($definedName->getWorksheet() !== null && $definedName->getWorksheet()->getHashCode() === $worksheet->getHashCode()) { + $formula = $this->updateFormulaReferences($formula, $beforeCellAddress, $numberOfColumns, $numberOfRows, $worksheet->getTitle()); + $definedName->setValue($formula); + } } } }