See Release Notes
Long Term Support Release
<?php namespace PhpOffice\PhpSpreadsheet\Reader;> use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException; use PhpOffice\PhpSpreadsheet\Reader\Security\XmlScanner; > use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;use PhpOffice\PhpSpreadsheet\Shared\File;> use PhpOffice\PhpSpreadsheet\Spreadsheet;abstract class BaseReader implements IReader { /** * Read data only? * Identifies whether the Reader should only read data values for cells, and ignore any formatting information; * or whether it should read both data and formatting. * * @var bool */ protected $readDataOnly = false; /** * Read empty cells? * Identifies whether the Reader should read data values for cells all cells, or should ignore cells containing * null value or empty string. * * @var bool */ protected $readEmptyCells = true; /** * Read charts that are defined in the workbook? * Identifies whether the Reader should read the definitions for any charts that exist in the workbook;. * * @var bool */ protected $includeCharts = false; /** * Restrict which sheets should be loaded? * This property holds an array of worksheet names to be loaded. If null, then all worksheets will be loaded. *< * @var array of string> * @var null|string[]*/ protected $loadSheetsOnly; /** * IReadFilter instance. * * @var IReadFilter */ protected $readFilter;> /** @var resource */protected $fileHandle; /**< * @var XmlScanner> * @var ?XmlScanner*/ protected $securityScanner; public function __construct() { $this->readFilter = new DefaultReadFilter(); } public function getReadDataOnly() { return $this->readDataOnly; }< public function setReadDataOnly($pValue)> public function setReadDataOnly($readCellValuesOnly){< $this->readDataOnly = (bool) $pValue;> $this->readDataOnly = (bool) $readCellValuesOnly;return $this; } public function getReadEmptyCells() { return $this->readEmptyCells; }< public function setReadEmptyCells($pValue)> public function setReadEmptyCells($readEmptyCells){< $this->readEmptyCells = (bool) $pValue;> $this->readEmptyCells = (bool) $readEmptyCells;return $this; } public function getIncludeCharts() { return $this->includeCharts; }< public function setIncludeCharts($pValue)> public function setIncludeCharts($includeCharts){< $this->includeCharts = (bool) $pValue;> $this->includeCharts = (bool) $includeCharts;return $this; } public function getLoadSheetsOnly() { return $this->loadSheetsOnly; }< public function setLoadSheetsOnly($value)> public function setLoadSheetsOnly($sheetList){< if ($value === null) {> if ($sheetList === null) {return $this->setLoadAllSheets(); }< $this->loadSheetsOnly = is_array($value) ? $value : [$value];> $this->loadSheetsOnly = is_array($sheetList) ? $sheetList : [$sheetList];return $this; } public function setLoadAllSheets() { $this->loadSheetsOnly = null; return $this; } public function getReadFilter() { return $this->readFilter; }< public function setReadFilter(IReadFilter $pValue)> public function setReadFilter(IReadFilter $readFilter){< $this->readFilter = $pValue;> $this->readFilter = $readFilter;return $this; }< public function getSecurityScanner()> public function getSecurityScanner(): ?XmlScanner{< if (property_exists($this, 'securityScanner')) {return $this->securityScanner; }< return null;> public function getSecurityScannerOrThrow(): XmlScanner > { > if ($this->securityScanner === null) { > throw new ReaderException('Security scanner is unexpectedly null'); > } > > return $this->securityScanner; > } > > protected function processFlags(int $flags): void > { > if (((bool) ($flags & self::LOAD_WITH_CHARTS)) === true) { > $this->setIncludeCharts(true); > } > if (((bool) ($flags & self::READ_DATA_ONLY)) === true) { > $this->setReadDataOnly(true); > } > if (((bool) ($flags & self::SKIP_EMPTY_CELLS) || (bool) ($flags & self::IGNORE_EMPTY_CELLS)) === true) { > $this->setReadEmptyCells(false); > } > } > > protected function loadSpreadsheetFromFile(string $filename): Spreadsheet > { > throw new PhpSpreadsheetException('Reader classes must implement their own loadSpreadsheetFromFile() method');} /**< * Open file for reading. < * < * @param string $pFilename> * Loads Spreadsheet from file.*< * @throws Exception> * @param int $flags the optional second parameter flags may be used to identify specific elements > * that should be loaded, but which won't be loaded by default, using these values: > * IReader::LOAD_WITH_CHARTS - Include any charts that are defined in the loaded file > */ > public function load(string $filename, int $flags = 0): Spreadsheet > { > $this->processFlags($flags); > > try { > return $this->loadSpreadsheetFromFile($filename); > } catch (ReaderException $e) { > throw $e; > } > } > > /** > * Open file for reading.*/< protected function openFile($pFilename)> protected function openFile(string $filename): void{< File::assertFile($pFilename);> $fileHandle = false; > if ($filename) { > File::assertFile($filename);// Open file< $this->fileHandle = fopen($pFilename, 'r'); < if ($this->fileHandle === false) { < throw new Exception('Could not open file ' . $pFilename . ' for reading.');> $fileHandle = fopen($filename, 'rb'); > } > if ($fileHandle === false) { > throw new ReaderException('Could not open file ' . $filename . ' for reading.');}> } > $this->fileHandle = $fileHandle;}