diff --git a/src/Spout/Writer/AbstractWriter.php b/src/Spout/Writer/AbstractWriter.php index 68d452f..80438c1 100644 --- a/src/Spout/Writer/AbstractWriter.php +++ b/src/Spout/Writer/AbstractWriter.php @@ -69,17 +69,18 @@ abstract class AbstractWriter implements WriterInterface * By using this method, the data will be written to a file. * * @param string $outputFilePath Path of the output file that will contain the data + * @param string $sheetName The custom name of the sheet * @return \Box\Spout\Writer\AbstractWriter * @throws \Box\Spout\Common\Exception\IOException If the writer cannot be opened or if the given path is not writable */ - public function openToFile($outputFilePath) + public function openToFile($outputFilePath, $sheetName = null) { $this->outputFilePath = $outputFilePath; $this->filePointer = $this->globalFunctionsHelper->fopen($this->outputFilePath, 'wb+'); $this->throwIfFilePointerIsNotAvailable(); - $this->openWriter(); + $this->openWriter($sheetName); $this->isWriterOpened = true; return $this; @@ -204,5 +205,4 @@ abstract class AbstractWriter implements WriterInterface $this->closeWriter(); $this->isWriterOpened = false; } -} - +} \ No newline at end of file diff --git a/src/Spout/Writer/Helper/XLSX/FileSystemHelper.php b/src/Spout/Writer/Helper/XLSX/FileSystemHelper.php index fddbb25..daaa0dd 100644 --- a/src/Spout/Writer/Helper/XLSX/FileSystemHelper.php +++ b/src/Spout/Writer/Helper/XLSX/FileSystemHelper.php @@ -249,10 +249,13 @@ EOD; EOD; + + $escaper = new \Box\Spout\Common\Escaper\XLSX(); /** @var Worksheet $worksheet */ foreach ($worksheets as $worksheet) { - $contentTypesXmlFileContents .= ' ' . PHP_EOL; + $worksheetName = $worksheet->getExternalSheet()->getName(); + $contentTypesXmlFileContents .= ' ' . PHP_EOL; } $contentTypesXmlFileContents .= <<getExternalSheet()->getName(); $worksheetId = $worksheet->getId(); - $workbookXmlFileContents .= ' ' . PHP_EOL; + $workbookXmlFileContents .= ' ' . PHP_EOL; } $workbookXmlFileContents .= <<getExternalSheet()->getName(); $worksheetId = $worksheet->getId(); - $workbookRelsXmlFileContents .= ' ' . PHP_EOL; + $workbookRelsXmlFileContents .= ' ' . PHP_EOL; } $workbookRelsXmlFileContents .= ''; diff --git a/src/Spout/Writer/Internal/XLSX/Workbook.php b/src/Spout/Writer/Internal/XLSX/Workbook.php index e6ca0db..060fbf8 100644 --- a/src/Spout/Writer/Internal/XLSX/Workbook.php +++ b/src/Spout/Writer/Internal/XLSX/Workbook.php @@ -62,13 +62,18 @@ class Workbook /** * Creates a new sheet in the workbook. The current sheet remains unchanged. * + * @param string $sheetName The custom name of the sheet * @return Worksheet The created sheet * @throws \Box\Spout\Common\Exception\IOException If unable to open the sheet for writing */ - public function addNewSheet() + public function addNewSheet($sheetName = null) { $newSheetNumber = count($this->worksheets); $sheet = new Sheet($newSheetNumber); + if( !empty($sheetName) ) + { + $sheet->setName($sheetName); + } $worksheetFilesFolder = $this->fileSystemHelper->getXlWorksheetsFolder(); $worksheet = new Worksheet($sheet, $worksheetFilesFolder, $this->sharedStringsHelper, $this->shouldUseInlineStrings); @@ -132,7 +137,7 @@ class Workbook * @param Worksheet $worksheet * @return void */ - protected function setCurrentWorksheet($worksheet) + public function setCurrentWorksheet($worksheet) { $this->currentWorksheet = $worksheet; } diff --git a/src/Spout/Writer/Sheet.php b/src/Spout/Writer/Sheet.php index fd86c18..d2a27d5 100644 --- a/src/Spout/Writer/Sheet.php +++ b/src/Spout/Writer/Sheet.php @@ -27,6 +27,16 @@ class Sheet $this->name = self::DEFAULT_SHEET_NAME_PREFIX . ($sheetNumber + 1); } + /** + * @param string $sheetName The custom name of the sheet + * @return void + */ + public function setName($sheetName) + { + $sheetName = str_replace(' ', '_', $sheetName); + $this->name = $sheetName; + } + /** * @return int Number of the sheet, based on order of creation (zero-based) */ diff --git a/src/Spout/Writer/XLSX.php b/src/Spout/Writer/XLSX.php index 62e98f1..874ef06 100644 --- a/src/Spout/Writer/XLSX.php +++ b/src/Spout/Writer/XLSX.php @@ -66,15 +66,24 @@ class XLSX extends AbstractWriter /** * Configures the write and sets the current sheet pointer to a new sheet. * + * @param string $sheetName The custom name of the sheet * @return void * @throws \Box\Spout\Common\Exception\IOException If unable to open the file for writing */ - protected function openWriter() + protected function openWriter($sheetName = null) { if (!$this->book) { $tempFolder = ($this->tempFolder) ? : sys_get_temp_dir(); $this->book = new Workbook($tempFolder, $this->shouldUseInlineStrings, $this->shouldCreateNewSheetsAutomatically); - $this->book->addNewSheetAndMakeItCurrent(); + if( empty($sheetName) ) + { + $this->book->addNewSheetAndMakeItCurrent(); + } + else + { + $worksheet = $this->book->addNewSheet($sheetName); + $this->book->setCurrentWorksheet($worksheet); + } } } @@ -125,6 +134,18 @@ class XLSX extends AbstractWriter return $this->book->getCurrentWorksheet()->getExternalSheet(); } + /** + * Returns the the workbook for the XLSX file + * + * @return Book The workbook for the XLSX file + * @throws \Box\Spout\Writer\Exception\WriterNotOpenedException If the writer has not been opened yet + */ + public function getBook() + { + $this->throwIfBookIsNotAvailable(); + return $this->book; + } + /** * Sets the given sheet as the current one. New data will be written to this sheet. * The writing will resume where it stopped (i.e. data won't be truncated).