/** * Write BIFF record RANGEPROTECTION * * Openoffice.org's Documentaion of the Microsoft Excel File Format uses term RANGEPROTECTION for these records * Microsoft Office Excel 97-2007 Binary File Format Specification uses term FEAT for these records */ private function writeRangeProtection() { foreach ($this->phpSheet->getProtectedCells() as $range => $password) { // number of ranges, e.g. 'A1:B3 C20:D25' $cellRanges = explode(' ', $range); $cref = count($cellRanges); $recordData = pack('vvVVvCVvVv', 0x868, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, $cref, 0x0, 0x0); foreach ($cellRanges as $cellRange) { $recordData .= $this->writeBIFF8CellRangeAddressFixed($cellRange); } // the rgbFeat structure $recordData .= pack('VV', 0x0, hexdec($password)); $recordData .= \PHPExcel\Shared\StringHelper::UTF8toBIFF8UnicodeLong('p' . md5($recordData)); $length = strlen($recordData); $record = 0x868; // Record identifier $header = pack("vv", $record, $length); $this->append($header . $recordData); } }
/** * Write ProtectedRanges * * @param \PHPExcel\Shared\XMLWriter $objWriter XML Writer * @param \PHPExcel\Worksheet $pSheet Worksheet * @throws \PHPExcel\Writer\Exception */ private function writeProtectedRanges(\PHPExcel\Shared\XMLWriter $objWriter = null, \PHPExcel\Worksheet $pSheet = null) { if (count($pSheet->getProtectedCells()) > 0) { // protectedRanges $objWriter->startElement('protectedRanges'); // Loop protectedRanges foreach ($pSheet->getProtectedCells() as $protectedCell => $passwordHash) { // protectedRange $objWriter->startElement('protectedRange'); $objWriter->writeAttribute('name', 'p' . md5($protectedCell)); $objWriter->writeAttribute('sqref', $protectedCell); if (!empty($passwordHash)) { $objWriter->writeAttribute('password', $passwordHash); } $objWriter->endElement(); } $objWriter->endElement(); } }