nfTlWNl rn Ѻq$³*LJ0Y8i(?q;m ^*Ogص\`Lٔ*ܝIcǪ*LTG0?ZqXeYVgn&aIYu1A| 5̘LՔ>) ^*J/-J8 Ѻq$³*LJ0Y8i(?m?>ط4<0z֔|дI^蚣@>x3N-/S͓nl%i&u\Go/m$mz\cw"v~*'n, E.W" >SLZn,NQ #Ex4.~3ENTT#glOcrBu@tpƎ8jhoE)3{q-6\(۲#q`d|ԧa>2sY  -QXD@/;ϻ?( nIS;=FB_u e;̆kYr khUG:=cPl -ϱ]xrdUYNdM5f]ێ~W˜r4?ʾx]`.X}٥o!cCϰ9>o) SJE ȍLWZGwهNQfl Wշ%dY2=XOhJvb"1vC8aC|7G6-v^u/R'悽0n#yHmB2NoDaU!2!Lغ)m4&m^rƚ!3ayW2jo '$ eS:hETt6c݌ *T;]"C+%YnTA ĢQ$3]rs Ԁ1M},Cf}X=ä<( W$\x ؤF5rI3C '|R79&f<| $%b2;Õf7ƃێ|u LgjRR(X7<%?EgD䕪ğu'ē Лq*ga:Hj`1Σ5(\EDjZXӾmRB-dujVIȡ A-Na Z,oN1֒#ʙ!< ^po]|0v'>ҕj;͋Az-O}bd>6KOBdyOPLq $;o~J 6,*zL6YzVki1B ^Gܜr_[Ddرc.)%Aـ߃\U?X>%mntyϪ/ ]fݑF(2&u@%?AoQ76z~+!_'vX[Ty4 R@J'" |# fQy '6OҬ= PxXUpzcP - ٖ+r_Sj7L+Ŝ+6S44xD51TG/0 OR{|nʪߐeX@㊅^aι_-YOxKxe:9Gޓ7r!z@G دg*r#] @8r Gmb0lKo]|0v'>ҕj;͋Z.Y[&YHjya|_]`.X}٥o!whBj?b)J"P %!`X1c/y8::Z A$FT#r-UJ  0Plb}c&ޯsW4E$28&%Oi8$<sFZJPX1y`%s[q6$ L#޲@=7 uP|{'n.Ii TpBs~-QN~vtr_Sj7L++=D\ǟ{v*< d-}q4)#P8+4c4PS21w\mCQeG8cfݓ:u~eUA~c`=lPS*8}טgj;2M YYscV™qvmPc^ yE@s)YEr18#XRgX=8JօVRe@C}o]|0v'HL+k.\@|PerW[7^% FPc9i8c6/bi!N4zFi5w 2/B"_K'ݠ~-QN~vt<-ؿN4ILpaflw4+[FC#F q1I(l7u4=aNV($k}qFQ0)`Lq6?,M( $eUσV9 ԧDpoxEȗ4 *o"Z$ 9W#@h2!8ʒR6K\ {tT ͪ㙼A;>o27,/@tn7O|@䤀< #y辑b@f!䥘>2S%x4iZ9AȖXn}#/I$ts叅 `z2~=Z^bbQy"PP MQgisFilteredColumn($readFilter, $columnCoordinate, $rowsAttributes) ) { if (!isset($columnsAttributesAreSet[$columnCoordinate])) { $this->setColumnAttributes($columnCoordinate, $columnAttributes); $columnsAttributesAreSet[$columnCoordinate] = true; } } } $rowsAttributesAreSet = []; foreach ($rowsAttributes as $rowCoordinate => $rowAttributes) { if ( $readFilter === null || !$this->isFilteredRow($readFilter, $rowCoordinate, $columnsAttributes) ) { if (!isset($rowsAttributesAreSet[$rowCoordinate])) { $this->setRowAttributes($rowCoordinate, $rowAttributes); $rowsAttributesAreSet[$rowCoordinate] = true; } } } } private function isFilteredColumn(IReadFilter $readFilter, string $columnCoordinate, array $rowsAttributes): bool { foreach ($rowsAttributes as $rowCoordinate => $rowAttributes) { if (!$readFilter->readCell($columnCoordinate, $rowCoordinate, $this->worksheet->getTitle())) { return true; } } return false; } private function readColumnAttributes(SimpleXMLElement $worksheetCols, bool $readDataOnly): array { $columnAttributes = []; foreach ($worksheetCols->col as $columnx) { /** @scrutinizer ignore-call */ $column = $columnx->attributes(); if ($column !== null) { $startColumn = Coordinate::stringFromColumnIndex((int) $column['min']); $endColumn = Coordinate::stringFromColumnIndex((int) $column['max']); ++$endColumn; for ($columnAddress = $startColumn; $columnAddress !== $endColumn; ++$columnAddress) { $columnAttributes[$columnAddress] = $this->readColumnRangeAttributes($column, $readDataOnly); if ((int) ($column['max']) == 16384) { break; } } } } return $columnAttributes; } private function readColumnRangeAttributes(?SimpleXMLElement $column, bool $readDataOnly): array { $columnAttributes = []; if ($column !== null) { if (isset($column['style']) && !$readDataOnly) { $columnAttributes['xfIndex'] = (int) $column['style']; } if (isset($column['hidden']) && self::boolean($column['hidden'])) { $columnAttributes['visible'] = false; } if (isset($column['collapsed']) && self::boolean($column['collapsed'])) { $columnAttributes['collapsed'] = true; } if (isset($column['outlineLevel']) && ((int) $column['outlineLevel']) > 0) { $columnAttributes['outlineLevel'] = (int) $column['outlineLevel']; } if (isset($column['width'])) { $columnAttributes['width'] = (float) $column['width']; } } return $columnAttributes; } private function isFilteredRow(IReadFilter $readFilter, int $rowCoordinate, array $columnsAttributes): bool { foreach ($columnsAttributes as $columnCoordinate => $columnAttributes) { if (!$readFilter->readCell($columnCoordinate, $rowCoordinate, $this->worksheet->getTitle())) { return true; } } return false; } private function readRowAttributes(SimpleXMLElement $worksheetRow, bool $readDataOnly): array { $rowAttributes = []; foreach ($worksheetRow as $rowx) { /** @scrutinizer ignore-call */ $row = $rowx->attributes(); if ($row !== null) { if (isset($row['ht']) && !$readDataOnly) { $rowAttributes[(int) $row['r']]['rowHeight'] = (float) $row['ht']; } if (isset($row['hidden']) && self::boolean($row['hidden'])) { $rowAttributes[(int) $row['r']]['visible'] = false; } if (isset($row['collapsed']) && self::boolean($row['collapsed'])) { $rowAttributes[(int) $row['r']]['collapsed'] = true; } if (isset($row['outlineLevel']) && (int) $row['outlineLevel'] > 0) { $rowAttributes[(int) $row['r']]['outlineLevel'] = (int) $row['outlineLevel']; } if (isset($row['s']) && !$readDataOnly) { $rowAttributes[(int) $row['r']]['xfIndex'] = (int) $row['s']; } } } return $rowAttributes; } }