AutorÃa | Ultima modificación | Ver Log |
<?phpdeclare(strict_types=1);namespace OpenSpout\Reader\XLSX;use OpenSpout\Common\Exception\IOException;use OpenSpout\Common\Helper\Escaper\XLSX;use OpenSpout\Reader\AbstractReader;use OpenSpout\Reader\Exception\NoSheetsFoundException;use OpenSpout\Reader\XLSX\Manager\SharedStringsCaching\CachingStrategyFactory;use OpenSpout\Reader\XLSX\Manager\SharedStringsCaching\CachingStrategyFactoryInterface;use OpenSpout\Reader\XLSX\Manager\SharedStringsCaching\MemoryLimit;use OpenSpout\Reader\XLSX\Manager\SharedStringsManager;use OpenSpout\Reader\XLSX\Manager\SheetManager;use OpenSpout\Reader\XLSX\Manager\WorkbookRelationshipsManager;use ZipArchive;/*** @extends AbstractReader<SheetIterator>*/final class Reader extends AbstractReader{private ZipArchive $zip;/** @var SharedStringsManager Manages shared strings */private SharedStringsManager $sharedStringsManager;/** @var SheetIterator To iterator over the XLSX sheets */private SheetIterator $sheetIterator;private readonly Options $options;private readonly CachingStrategyFactoryInterface $cachingStrategyFactory;public function __construct(?Options $options = null,?CachingStrategyFactoryInterface $cachingStrategyFactory = null) {$this->options = $options ?? new Options();if (null === $cachingStrategyFactory) {$memoryLimit = \ini_get('memory_limit');$cachingStrategyFactory = new CachingStrategyFactory(new MemoryLimit($memoryLimit));}$this->cachingStrategyFactory = $cachingStrategyFactory;}public function getSheetIterator(): SheetIterator{$this->ensureStreamOpened();return $this->sheetIterator;}/*** Returns whether stream wrappers are supported.*/protected function doesSupportStreamWrapper(): bool{return false;}/*** Opens the file at the given file path to make it ready to be read.* It also parses the sharedStrings.xml file to get all the shared strings available in memory* and fetches all the available sheets.** @param string $filePath Path of the file to be read** @throws IOException If the file at the given path or its content cannot be read* @throws NoSheetsFoundException If there are no sheets in the file*/protected function openReader(string $filePath): void{$this->zip = new ZipArchive();if (true !== $this->zip->open($filePath)) {throw new IOException("Could not open {$filePath} for reading.");}$this->sharedStringsManager = new SharedStringsManager($filePath,$this->options,new WorkbookRelationshipsManager($filePath),$this->cachingStrategyFactory);if ($this->sharedStringsManager->hasSharedStrings()) {// Extracts all the strings from the sheets for easy access in the future$this->sharedStringsManager->extractSharedStrings();}$this->sheetIterator = new SheetIterator(new SheetManager($filePath,$this->options,$this->sharedStringsManager,new XLSX()));}/*** Closes the reader. To be used after reading the file.*/protected function closeReader(): void{$this->zip->close();$this->sharedStringsManager->cleanup();}}