setSpreadsheet($spreadsheet); $this->writerPartContent = new Content($this); $this->writerPartMeta = new Meta($this); $this->writerPartMetaInf = new MetaInf($this); $this->writerPartMimetype = new Mimetype($this); $this->writerPartSettings = new Settings($this); $this->writerPartStyles = new Styles($this); $this->writerPartThumbnails = new Thumbnails($this); } public function getWriterPartContent(): Content { return $this->writerPartContent; } public function getWriterPartMeta(): Meta { return $this->writerPartMeta; } public function getWriterPartMetaInf(): MetaInf { return $this->writerPartMetaInf; } public function getWriterPartMimetype(): Mimetype { return $this->writerPartMimetype; } public function getWriterPartSettings(): Settings { return $this->writerPartSettings; } public function getWriterPartStyles(): Styles { return $this->writerPartStyles; } public function getWriterPartThumbnails(): Thumbnails { return $this->writerPartThumbnails; } /** * Save PhpSpreadsheet to file. * * @param resource|string $filename */ public function save($filename, int $flags = 0): void { if (!$this->spreadSheet) { throw new WriterException('PhpSpreadsheet object unassigned.'); } $this->processFlags($flags); // garbage collect $this->spreadSheet->garbageCollect(); $this->openFileHandle($filename); $zip = $this->createZip(); $zip->addFile('META-INF/manifest.xml', $this->getWriterPartMetaInf()->write()); $zip->addFile('Thumbnails/thumbnail.png', $this->getWriterPartthumbnails()->write()); // Settings always need to be written before Content; Styles after Content $zip->addFile('settings.xml', $this->getWriterPartsettings()->write()); $zip->addFile('content.xml', $this->getWriterPartcontent()->write()); $zip->addFile('meta.xml', $this->getWriterPartmeta()->write()); $zip->addFile('mimetype', $this->getWriterPartmimetype()->write()); $zip->addFile('styles.xml', $this->getWriterPartstyles()->write()); // Close file try { $zip->finish(); } catch (OverflowException $e) { throw new WriterException('Could not close resource.'); } $this->maybeCloseFileHandle(); } /** * Create zip object. * * @return ZipStream */ private function createZip() { // Try opening the ZIP file if (!is_resource($this->fileHandle)) { throw new WriterException('Could not open resource for writing.'); } // Create new ZIP stream $options = new Archive(); $options->setEnableZip64(false); $options->setOutputStream($this->fileHandle); return new ZipStream(null, $options); } /** * Get Spreadsheet object. * * @return Spreadsheet */ public function getSpreadsheet() { if ($this->spreadSheet !== null) { return $this->spreadSheet; } throw new WriterException('No PhpSpreadsheet assigned.'); } /** * Set Spreadsheet object. * * @param Spreadsheet $spreadsheet PhpSpreadsheet object * * @return $this */ public function setSpreadsheet(Spreadsheet $spreadsheet) { $this->spreadSheet = $spreadsheet; return $this; } }