nfTlWNl rn Ѻq$³*%yNk9S[H}$Λ@?7 ~ CѶͫ\]*uQlf Ȥ3 CˍLXlߙ-5E1WÎ\`Lٔ*ܝIc3ٿ ZmW2d.kغkGrJsf]ZV hHWgq!`P D\isPaܧ\ Ѻq$³*n[^O"_L0\vJrr/M&oAY\QN#]>H7Kh>/. vu˼ƒPQ?ltjdcE&J0ߗ‘s&@&gu NeQCx0>1tr3A؅_dc?bLoj6hic2]%lg*\h&'cv-K9.MBzQ"g,B+KQ86 *B(*>g -l ":ebFEbo'S'?<>n[7]#)?H߅RLtݸl8S+簅Aʼn3nAXDq^jކԶAmǷX_.yBAnn x9o50Eb2 O?XLJ5JTYzOb6L-&$# ^P:XHn~#LGN4PiX> `z}o1V1G+a[Yǯ4/7JJ]n BO C8@jee85zh4m˥ݩ: )(\cPmY_0d,΢$gtf~ l,Q=ɯȟCign>v ˗n,\?Bw ;]"C+%YnTA ĢQ$3C3JPaHaY_0:Q e\; f(tY mA~YF2 <3)iftsUPA];F ĢQ$3 ĢQ$3;9k-aa~C%GڼNz"lt5gJ66mV>ifV0pn-ݹOCY~ h0Vsl$Z;`YKp!fgG0кx9.ス6O9`ȑx?Řrt~Оk*"4IzЗu&eIsn~ ujg@D)d(;Fe%g%lT{1$MrÕ&3 I]C63StymrMNe#4kZ9Rғ+|927 5ƙnGc\CQ&  HyS ĢQ$3;|,7 bȡ48Tg*V6xx7*9) ĢQ$3GvO@%[Abu?C iYeXM#Į 7S]IVT= #>Z9%Jrg@ʰGN& ĢQ$3 j E/}M6?'[ a֩CQyQ%cgxjovNdB'@S3v_n}:}y [ ָ X$o(U}E ĢQ$3g¦ WVH7|~#99oF eQU*A43ee]Z΍x Z>g]Gr*x|nB?ʹG Lr(/>3 N^0a {Xm{ޛ,daܨۉGֆ\-V2i$Hٗ?aiMp A<ŨRBG>BuQO4>!iD=~UB0"esB>ɝ?vn.@ -+ ĢQ$3M ] kTc$Rme|b!PD*kݠMX0lg&]YW.],@֏K1ϺX(WYE!+rDgDHg-5 XtDLjxkS1cAuk4zAÁz0FyRa_$>6#``Ym7$]p/DvJ0wӤiNj@EJ)Ѣ 'vfdM=EK@''q(Yf-^%Q$[Q;N?PF HUOyqPMՑ[I~}2 )B쏂d[]W-9YbYe~$휮Z'fœtɤ_eSC(|~tX)N5G")#6n7)u[W3sB4=,>90Ys)@aG>ҫr@zɴoE7$𧲠-v7ʖ˫ם[ 6SқHZ&i1D^TH-K1_u >e@Ħs*܀kH)cPZNZaW\5n`=@;2vJUSa#QCSٯg GL.Ժ% !Fk3{7KuӮ PҋN9L љ jKl9$^|Hp)W;;i"~*P84R msL]`G1S|&ׅ2K=ثmz5b9& 9i͸@d h:mN1ia* 7p:l&Ą{DC:P3Mi<=cAa i'C!9[\X8sL{ 45Km_BɳEwj{C1AԼnBTsK8U ၗK4вjDH:zc,D9oy׳uFM.Ũitk dAŰTf'}u&c}I#07+53f/\`vʭؐcӐ:;=l:N)KU ߼j4ڟdY&Xl3m&E Nht{wЗ6O<)##J4ݽIX_mZniNs\j B,O݉K?錄粉!.H􇰹Vg j Y kG/<bUމ:Ijc* msL]`GZ?K#j쑘t6b" qE?ٝ$Kh ' LndtG7Ćl[{` &Xl3m&E NhVzv(]v",%Hgb)8#8)&xz΄] rؕy?)R 0nPTz58:ʹ0|5フkY W5n#m-cWÔ@[1WjR-g\0`Ю>PqSJA "7Ĭ]SN9@<,_ VH~ ђ 0) || ($endCellColumn < 0)) { return ExcelError::REF(); } $endCellColumn = Coordinate::stringFromColumnIndex($endCellColumn + 1); $cellAddress = "{$startCellColumn}{$startCellRow}"; if (($startCellColumn != $endCellColumn) || ($startCellRow != $endCellRow)) { $cellAddress .= ":{$endCellColumn}{$endCellRow}"; } return self::extractRequiredCells($worksheet, $cellAddress); } /** @return mixed */ private static function extractRequiredCells(?Worksheet $worksheet, string $cellAddress) { return Calculation::getInstance($worksheet !== null ? $worksheet->getParent() : null) ->extractCellRange($cellAddress, $worksheet, false); } private static function extractWorksheet(?string $cellAddress, Cell $cell): array { $cellAddress = self::assessCellAddress($cellAddress ?? '', $cell); $sheetName = ''; if (strpos($cellAddress, '!') !== false) { [$sheetName, $cellAddress] = Worksheet::extractSheetTitle($cellAddress, true); $sheetName = trim($sheetName, "'"); } $worksheet = ($sheetName !== '') ? $cell->getWorksheet()->getParentOrThrow()->getSheetByName($sheetName) : $cell->getWorksheet(); return [$cellAddress, $worksheet]; } private static function assessCellAddress(string $cellAddress, Cell $cell): string { if (preg_match('/^' . Calculation::CALCULATION_REGEXP_DEFINEDNAME . '$/mui', $cellAddress) !== false) { $cellAddress = Functions::expandDefinedName($cellAddress, $cell); } return $cellAddress; } /** * @param mixed $width * @param mixed $columns */ private static function adjustEndCellColumnForWidth(string $endCellColumn, $width, int $startCellColumn, $columns): int { $endCellColumn = Coordinate::columnIndexFromString($endCellColumn) - 1; if (($width !== null) && (!is_object($width))) { $endCellColumn = $startCellColumn + (int) $width - 1; } else { $endCellColumn += (int) $columns; } return $endCellColumn; } /** * @param mixed $height * @param mixed $rows * @param mixed $endCellRow */ private static function adustEndCellRowForHeight($height, int $startCellRow, $rows, $endCellRow): int { if (($height !== null) && (!is_object($height))) { $endCellRow = $startCellRow + (int) $height - 1; } else { $endCellRow += (int) $rows; } return $endCellRow; } }