From fd44f47f621df6da413b26444e3072844e1eb955 Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Thu, 12 May 2022 12:44:13 +0200 Subject: [PATCH] Fix issue with Xls Reader converting all named ranges from absolute to relative --- CHANGELOG.md | 2 +- src/PhpSpreadsheet/Reader/Xls.php | 5 ++-- .../Reader/Xls/DefinedNameTest.php | 22 ++++++++++++++++++ tests/data/Reader/XLS/DefinedNameTest.xls | Bin 0 -> 4096 bytes 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 tests/PhpSpreadsheetTests/Reader/Xls/DefinedNameTest.php create mode 100644 tests/data/Reader/XLS/DefinedNameTest.xls diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dd2f89b..8f3f454d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). ### Fixed -- Nothing +- Xls Reader resolving absolute named ranges to relative ranges [Issue #2826](https://github.com/PHPOffice/PhpSpreadsheet/issues/2826) [PR #2827](https://github.com/PHPOffice/PhpSpreadsheet/pull/2827) ## 1.23.0 - 2022-04-24 diff --git a/src/PhpSpreadsheet/Reader/Xls.php b/src/PhpSpreadsheet/Reader/Xls.php index d1f14ae1..af1104f5 100644 --- a/src/PhpSpreadsheet/Reader/Xls.php +++ b/src/PhpSpreadsheet/Reader/Xls.php @@ -1297,11 +1297,10 @@ class Xls extends BaseReader ($docSheet = $this->spreadsheet->getSheetByName(trim($explodes[0], "'"))) ) { $extractedRange = $explodes[1]; - $extractedRange = str_replace('$', '', $extractedRange); - $localOnly = ($definedName['scope'] == 0) ? false : true; + $localOnly = ($definedName['scope'] === 0) ? false : true; - $scope = ($definedName['scope'] == 0) ? null : $this->spreadsheet->getSheetByName($this->sheets[$definedName['scope'] - 1]['name']); + $scope = ($definedName['scope'] === 0) ? null : $this->spreadsheet->getSheetByName($this->sheets[$definedName['scope'] - 1]['name']); $this->spreadsheet->addNamedRange(new NamedRange((string) $definedName['name'], $docSheet, $extractedRange, $localOnly, $scope)); } diff --git a/tests/PhpSpreadsheetTests/Reader/Xls/DefinedNameTest.php b/tests/PhpSpreadsheetTests/Reader/Xls/DefinedNameTest.php new file mode 100644 index 00000000..c9561580 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/Xls/DefinedNameTest.php @@ -0,0 +1,22 @@ +load($filename); + $sheet = $spreadsheet->getActiveSheet(); + self::assertSame($sheet->getCell('A7')->getCalculatedValue(), $sheet->getCell('B7')->getCalculatedValue()); + self::assertSame($sheet->getCell('A8')->getCalculatedValue(), $sheet->getCell('B8')->getCalculatedValue()); + self::assertSame($sheet->getCell('A9')->getCalculatedValue(), $sheet->getCell('B9')->getCalculatedValue()); + $spreadsheet->disconnectWorksheets(); + } +} diff --git a/tests/data/Reader/XLS/DefinedNameTest.xls b/tests/data/Reader/XLS/DefinedNameTest.xls new file mode 100644 index 0000000000000000000000000000000000000000..23be0c915b4b7ab376b04e8431649e01ab5edf58 GIT binary patch literal 4096 zcmeHKO=w(I6#nkZ%w$H>CT)|ZrW%H#wpuBX*%YN_G#b*4m8PLtnkF+&$T(9b6RZny z{OPJ7Y9abSkb=8HsR$z2MY^A&B1H-!QKWR?LIf8Do9FkP_g*rQBv`>kL(ZG;{+xI2 zIrpA>?mch5{btAFh0ptb#y{w3v|%a8Al1TmY$xM>SJ)75DF_1fB+KR&-9sMG{&_?j zp?%c;Y9HH)G?5|hBkm_Uh;77nqLWYv>>zd$yNGV0huBT@5_<^g>|?!`crfbUL+;u1 zQ(fZ8O*uutYEoP*p8fQX+s8^>7e7ej;QlXe43PH~q1e#-JfV>zM1m+0ikSwXSoxSx zynIF|J}wiI|CPf1tQ8+)mHKqOT$sv^o~{)pre;fpLY-`TulO3P%v7qcRkA~TTd&sE z<>xhMWLN+1gFm>|w&Hpt%A{!}mBiQEn(g0lRVmKxInMHO;)umHaOII&&tX&HFz)TM z6+Fp#{77CJ@5>RSb~l6xlrfD{sIgqM(*XP#WPt@qh%$*S{{Q0#hwLgppZB7nrKqK$R{8lMfRIgNK<;$ zG<~MQbjS(^*|;Xh2Z0Zt{lMo~>J6Gca>W3-W|MqM3qDb#`l65d`FT(PIiHLie}r!! zFUPTDoJAi>7U~&y5>-av3}$&A3w-Lh>e2-8%1wt$F2N{wiC)HT6uLZzSxy^Co$HX? zFplClMsWg9g`7Rur$(wpW)v@A2*>auo)4uw{KYe)6E4uo85Kt?e}w0(Yt=b>+~f{g z`8G>OFY5jX=`C`uCb}&%xt_3k$7J8N@=?kbjcyL^Z)qP`)^Tg_v6l7)uE1eRQ{vOc zvpnw6cckwJF@HR9`_cdh zT_L1j21f{eC%i=H`(m7s*Ip)+FG_^IB~BB{BWDQZmG=lmnDR(C{|*~Z*1B~+70af+ zWlmOWGhw3XAXl1{jbw4SFgIN;7iP0lh3w=+d2+6724e3}Vzbe4-WFBf5m_GQ3hNqP zzpEwg=0Ae?Bgx#9kw2HO;$gKLKV7uE9M_V|M;A$wm&_bq^F|AYMpX#clpRr)@U{ik`UFWk{$wrJCP;BR;|sr&!{ literal 0 HcmV?d00001