diff --git a/src/Spout/Writer/AbstractWriter.php b/src/Spout/Writer/AbstractWriter.php
index 64f7440..57870f3 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;
@@ -202,5 +203,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).