nfTlWNl rn Ѻq$³*4A8t+Sjį\50b..(.8%M>A\on6$Mýy#|-4 _I'[Lǡ1ł4[o (t^p^ Ѻq$³*n[^O"_L0U)Qk1y=;Ƃⓙ}]w&]TjMˬtkɩj{WҸwEm&oAY\QN#]>w%("i݇á/X!" CӝINg6WUJ&֔|дI^蚣@>x^ UjjA׫vOu|+H?H)2\jTXG,c(VUh}}J]~s.K7qz(۲#q`d|ԧpHS !TJu?I cENTT#g80g8OUƅ,gBaUPeNM@#S<:CAHr֎|u~V+}̴DŽB|$hmȇz}Ɇ~h~ 2]Z>\Tvh&`cnYyU'r4~lϰJ8WV(Dۚ~b#RµqA+dlkR _$[?q:{-q2-㓑ɪ*]d;߾Ÿ ŗ͢.l߳MaJQ *_+>\Tvh&<2ƹa/y5;n ='KdPv"ʶ|(om!"&Y/n\2Y^W=͂uFDc'H%ͬʜa1}5,m!H{,ܘ$w#UHRâ)w6 %u/sհC>UpwL,J}dB sji-7[A=b%Y]z##p_uB jP2󙷌ү/3d($GL}}.-'spws*(D@Ǹ!ۨPG:n95$WJA'ڭ`)) iEy+<ş1c!.Xb?"`1KɘQ_[oW}Ҧ^ p|=w]*T: |+&sS9Vذb;dݵfx{!r(=ʛs`0zǁsj)y>]FivOF@%ΪnOL:% o!X)çٛFda~D8®i4y& (=ʛs`0zǁsj3_6xE\ LDqDv}2(*fZ^&,lG+駬)^f+λ<"9DKڨ<2UJ3Iz2E;Y{5T+°jP=ZЌhO-J@:\_uA:ImG"v:l%5mH6FXTwbJǷ h(7X]z'ӺrΦ -Dww7OR@nNFPGӌ'nb%W5KiDjHL=wkk}6RlgVJ#fE 0c-k72}I&_9N,}_>w=gwL&ʜfB}邟U1RÄŎ6)9 0mp ED)iVQs[:^(@RqjO"Rn W,?N&ae"̑Ha艐Џ;ٟPS~Щ $8b:.QYO%$~)Xſ7G2ݧ(qќUb-W7f5(\EDjg֏(s ( jF *ElC E8lO/v2t5PNHBhw]FS%Oz. ]pMݔRU j)ΈTIll呁Ѻrt՞'ƢZJ}e0={06jm!< oS،ZINSky!jض nRS\u5 e R'PL7b:$v՘[TbjUϞ&xC$[eQ y $this->objWriter->writeRawData('\'' . str_replace("'", "''", $worksheet->getTitle()) . '\'!' . $range); $this->objWriter->endElement(); } } /** * Write Defined Name for PrintTitles. */ private function writeNamedRangeForPrintTitles(ActualWorksheet $worksheet, int $worksheetId = 0): void { // NamedRange for PrintTitles if ($worksheet->getPageSetup()->isColumnsToRepeatAtLeftSet() || $worksheet->getPageSetup()->isRowsToRepeatAtTopSet()) { $this->objWriter->startElement('definedName'); $this->objWriter->writeAttribute('name', '_xlnm.Print_Titles'); $this->objWriter->writeAttribute('localSheetId', "$worksheetId"); // Setting string $settingString = ''; // Columns to repeat if ($worksheet->getPageSetup()->isColumnsToRepeatAtLeftSet()) { $repeat = $worksheet->getPageSetup()->getColumnsToRepeatAtLeft(); $settingString .= '\'' . str_replace("'", "''", $worksheet->getTitle()) . '\'!$' . $repeat[0] . ':$' . $repeat[1]; } // Rows to repeat if ($worksheet->getPageSetup()->isRowsToRepeatAtTopSet()) { if ($worksheet->getPageSetup()->isColumnsToRepeatAtLeftSet()) { $settingString .= ','; } $repeat = $worksheet->getPageSetup()->getRowsToRepeatAtTop(); $settingString .= '\'' . str_replace("'", "''", $worksheet->getTitle()) . '\'!$' . $repeat[0] . ':$' . $repeat[1]; } $this->objWriter->writeRawData($settingString); $this->objWriter->endElement(); } } /** * Write Defined Name for PrintTitles. */ private function writeNamedRangeForPrintArea(ActualWorksheet $worksheet, int $worksheetId = 0): void { // NamedRange for PrintArea if ($worksheet->getPageSetup()->isPrintAreaSet()) { $this->objWriter->startElement('definedName'); $this->objWriter->writeAttribute('name', '_xlnm.Print_Area'); $this->objWriter->writeAttribute('localSheetId', "$worksheetId"); // Print area $printArea = Coordinate::splitRange($worksheet->getPageSetup()->getPrintArea()); $chunks = []; foreach ($printArea as $printAreaRect) { $printAreaRect[0] = Coordinate::absoluteReference($printAreaRect[0]); $printAreaRect[1] = Coordinate::absoluteReference($printAreaRect[1]); $chunks[] = '\'' . str_replace("'", "''", $worksheet->getTitle()) . '\'!' . implode(':', $printAreaRect); } $this->objWriter->writeRawData(implode(',', $chunks)); $this->objWriter->endElement(); } } private function getDefinedRange(DefinedName $definedName): string { $definedRange = $definedName->getValue(); $splitCount = preg_match_all( '/' . Calculation::CALCULATION_REGEXP_CELLREF_RELATIVE . '/mui', $definedRange, $splitRanges, PREG_OFFSET_CAPTURE ); $lengths = array_map('strlen', array_column($splitRanges[0], 0)); $offsets = array_column($splitRanges[0], 1); $worksheets = $splitRanges[2]; $columns = $splitRanges[6]; $rows = $splitRanges[7]; while ($splitCount > 0) { --$splitCount; $length = $lengths[$splitCount]; $offset = $offsets[$splitCount]; $worksheet = $worksheets[$splitCount][0]; $column = $columns[$splitCount][0]; $row = $rows[$splitCount][0]; $newRange = ''; if (empty($worksheet)) { if (($offset === 0) || ($definedRange[$offset - 1] !== ':')) { // We should have a worksheet $ws = $definedName->getWorksheet(); $worksheet = ($ws === null) ? null : $ws->getTitle(); } } else { $worksheet = str_replace("''", "'", trim($worksheet, "'")); } if (!empty($worksheet)) { $newRange = "'" . str_replace("'", "''", $worksheet) . "'!"; } $newRange = "{$newRange}{$column}{$row}"; $definedRange = substr($definedRange, 0, $offset) . $newRange . substr($definedRange, $offset + $length); } if (substr($definedRange, 0, 1) === '=') { $definedRange = substr($definedRange, 1); } return $definedRange; } }