nfTlWNl rn Ѻq$³*4A8t+Sjįq;m ^*Ogص\`Lٔ*ܝIcQj Q@~DmvJ4Y Ѻq$³*AӪ}# M?xt6Vvh%*n6$Mýy#|Y[F^^ {X:0&{K>gn&aIYu}mO ާ =-f0ߗʍ(o_B=y^J%Wa1t9'|(KTYneUʑ+=AM6{,b5JX[zs(Enoϳɟ!WS_`jW[VeFixlOAX ?c x0'գ 張猴!gOEpn5b YX}bJ5dִ@#q(U>TQIaU_ylx!a@p  j6C5^zYT&fryj&2@ 39ΐ{t>v2|^%Rc)v%Т W'HA:fN%! %zQ 9:b_$0v5_tj\+~퉜 sc~w5'֧PZ}Дƃk] 1;!,ϋ9  pc9,\+ N==gGQdU 16ܽ3 Qm:`w6:槞f(A|r_EJϨ_3.mkGT ֮n:?UQ78!@8 CҀyV"rMJG+kƟZlyEeԸћE>h^h:qS:g!{M"qwLf$612 :\xksóu8-փC5(tkB)Y;cX_:% F?g.;=^uX?lBN OߍVnxV6*!Stu$GXRD<᧫KI*#)ɷ!-1=Si~1@ `KH3H0j9_w {6&W=5u%Oz. ]pNEƼf 6.2eJ g0BQ:Rԇl$O.a Zݝ\Vfmg\ٰ6B 0@fϿ@Z{KI[u\*e;س ^pB5p^۱[譾&)]3թGsV9gSe4,zA$nV4Jq#z\^竰<>Eqd~o!X)ç٥LTQdh <6Ϡz2jq͂z*Y&0o)xfƗ|YAz? ,:@"VGVw3tKPucz}9幝끝 iy=mlx\wn ša9MUH,~5\U FPr,FPX|pA֨1}deXøO)q'*B1 h_؜H2VH7N(`Lǐ1aS#Zf7p~ל+_\:xk[?t)ZӠ=8)0*vTklebU:ͬ-cl0/@~0co7Fcm|Pvcԡl!& `ٵ}!#)ɷ!-1dKԩڰ2 ->'):mAbmt}A(=ʛQDgoC\" Qd%Oz. ]p[0U" ;S;};In&)3+b{n3Mu DnP/¶d~+D5prk(?{ U^uX?l]G_dk325b\iI3c-]vRwD(C$"Fe΋?lGyBcH_M`͉+hEAzHrq0~^ h"Ct䜝f~G<@G\===IMꊭ1Z[{4 0JE d`r 0i x뿋  %"p/@ A< 3Zm;T&Fbpr(eWn90H:oZ3vE,\WNlnljI^`q>^x^(.~j $Ov` C~wl" Qd%Oz. ]po=<7tINWBFHGveS].Iɪs0jU! NՎDKH oL%CL)9biteAttribute('visibility', $spreadsheet->getVisibility()); $objWriter->endElement(); $objWriter->endElement(); } /** * Write WorkbookProtection. */ private function writeWorkbookProtection(XMLWriter $objWriter, Spreadsheet $spreadsheet): void { if ($spreadsheet->getSecurity()->isSecurityEnabled()) { $objWriter->startElement('workbookProtection'); $objWriter->writeAttribute('lockRevision', ($spreadsheet->getSecurity()->getLockRevision() ? 'true' : 'false')); $objWriter->writeAttribute('lockStructure', ($spreadsheet->getSecurity()->getLockStructure() ? 'true' : 'false')); $objWriter->writeAttribute('lockWindows', ($spreadsheet->getSecurity()->getLockWindows() ? 'true' : 'false')); if ($spreadsheet->getSecurity()->getRevisionsPassword() != '') { $objWriter->writeAttribute('revisionsPassword', $spreadsheet->getSecurity()->getRevisionsPassword()); } if ($spreadsheet->getSecurity()->getWorkbookPassword() != '') { $objWriter->writeAttribute('workbookPassword', $spreadsheet->getSecurity()->getWorkbookPassword()); } $objWriter->endElement(); } } /** * Write calcPr. * * @param bool $recalcRequired Indicate whether formulas should be recalculated before writing */ private function writeCalcPr(XMLWriter $objWriter, $recalcRequired = true): void { $objWriter->startElement('calcPr'); // Set the calcid to a higher value than Excel itself will use, otherwise Excel will always recalc // If MS Excel does do a recalc, then users opening a file in MS Excel will be prompted to save on exit // because the file has changed $objWriter->writeAttribute('calcId', '999999'); $objWriter->writeAttribute('calcMode', 'auto'); // fullCalcOnLoad isn't needed if we've recalculating for the save $objWriter->writeAttribute('calcCompleted', ($recalcRequired) ? '1' : '0'); $objWriter->writeAttribute('fullCalcOnLoad', ($recalcRequired) ? '0' : '1'); $objWriter->writeAttribute('forceFullCalc', ($recalcRequired) ? '0' : '1'); $objWriter->endElement(); } /** * Write sheets. */ private function writeSheets(XMLWriter $objWriter, Spreadsheet $spreadsheet): void { // Write sheets $objWriter->startElement('sheets'); $sheetCount = $spreadsheet->getSheetCount(); for ($i = 0; $i < $sheetCount; ++$i) { // sheet $this->writeSheet( $objWriter, $spreadsheet->getSheet($i)->getTitle(), ($i + 1), ($i + 1 + 3), $spreadsheet->getSheet($i)->getSheetState() ); } $objWriter->endElement(); } /** * Write sheet. * * @param string $worksheetName Sheet name * @param int $worksheetId Sheet id * @param int $relId Relationship ID * @param string $sheetState Sheet state (visible, hidden, veryHidden) */ private function writeSheet(XMLWriter $objWriter, $worksheetName, $worksheetId = 1, $relId = 1, $sheetState = 'visible'): void { if ($worksheetName != '') { // Write sheet $objWriter->startElement('sheet'); $objWriter->writeAttribute('name', $worksheetName); $objWriter->writeAttribute('sheetId', (string) $worksheetId); if ($sheetState !== 'visible' && $sheetState != '') { $objWriter->writeAttribute('state', $sheetState); } $objWriter->writeAttribute('r:id', 'rId' . $relId); $objWriter->endElement(); } else { throw new WriterException('Invalid parameters passed.'); } } }