You are here

private function PHPExcel_Reader_Excel5::_readRangeProtection in Loft Data Grids 7.2

Same name and namespace in other branches
  1. 6.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5.php \PHPExcel_Reader_Excel5::_readRangeProtection()

* Read RANGEPROTECTION record * Reading of this record is based on Microsoft Office Excel 97-2000 Binary File Format Specification, * where it is referred to as FEAT record

1 call to PHPExcel_Reader_Excel5::_readRangeProtection()
PHPExcel_Reader_Excel5::load in vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5.php
* Loads PHPExcel from file * *

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5.php, line 4978

Class

PHPExcel_Reader_Excel5
PHPExcel_Reader_Excel5

Code

private function _readRangeProtection() {
  $length = self::_GetInt2d($this->_data, $this->_pos + 2);
  $recordData = $this
    ->_readRecordData($this->_data, $this->_pos + 4, $length);

  // move stream pointer to next record
  $this->_pos += 4 + $length;

  // local pointer in record data
  $offset = 0;
  if (!$this->_readDataOnly) {
    $offset += 12;

    // offset: 12; size: 2; shared feature type, 2 = enhanced protection, 4 = smart tag
    $isf = self::_GetInt2d($recordData, 12);
    if ($isf != 2) {

      // we only read FEAT records of type 2
      return;
    }
    $offset += 2;
    $offset += 5;

    // offset: 19; size: 2; count of ref ranges this feature is on
    $cref = self::_GetInt2d($recordData, 19);
    $offset += 2;
    $offset += 6;

    // offset: 27; size: 8 * $cref; list of cell ranges (like in hyperlink record)
    $cellRanges = array();
    for ($i = 0; $i < $cref; ++$i) {
      try {
        $cellRange = $this
          ->_readBIFF8CellRangeAddressFixed(substr($recordData, 27 + 8 * $i, 8));
      } catch (PHPExcel_Exception $e) {
        return;
      }
      $cellRanges[] = $cellRange;
      $offset += 8;
    }

    // offset: var; size: var; variable length of feature specific data
    $rgbFeat = substr($recordData, $offset);
    $offset += 4;

    // offset: var; size: 4; the encrypted password (only 16-bit although field is 32-bit)
    $wPassword = self::_GetInt4d($recordData, $offset);
    $offset += 4;

    // Apply range protection to sheet
    if ($cellRanges) {
      $this->_phpSheet
        ->protectCells(implode(' ', $cellRanges), strtoupper(dechex($wPassword)), true);
    }
  }
}