Merge pull request #1 from bizquiz/custom-column-widths

Use options manager for default row height and column width
This commit is contained in:
Alexander Hofstede 2020-05-26 13:17:03 +02:00 committed by GitHub
commit d065f95bcc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 20 deletions

View File

@ -23,6 +23,9 @@ class Worksheet
/** @var int Index of the last written row */ /** @var int Index of the last written row */
private $lastWrittenRowIndex; private $lastWrittenRowIndex;
/** @var bool has the sheet data header been written */
private $sheetDataStarted = false;
/** /**
* Worksheet constructor. * Worksheet constructor.
* *
@ -36,6 +39,7 @@ class Worksheet
$this->externalSheet = $externalSheet; $this->externalSheet = $externalSheet;
$this->maxNumColumns = 0; $this->maxNumColumns = 0;
$this->lastWrittenRowIndex = 0; $this->lastWrittenRowIndex = 0;
$this->sheetDataStarted = false;
} }
/** /**
@ -110,4 +114,20 @@ class Worksheet
// sheet index is zero-based, while ID is 1-based // sheet index is zero-based, while ID is 1-based
return $this->externalSheet->getIndex() + 1; return $this->externalSheet->getIndex() + 1;
} }
/**
* @return bool
*/
public function getSheetDataStarted()
{
return $this->sheetDataStarted;
}
/**
* @param bool $sheetDataStarted
*/
public function setSheetDataStarted($sheetDataStarted)
{
$this->sheetDataStarted = $sheetDataStarted;
}
} }

View File

@ -142,22 +142,28 @@ abstract class WriterMultiSheetsAbstract extends WriterAbstract
/** /**
* @param float $width * @param float $width
* @throws WriterNotOpenedException * @throws WriterAlreadyOpenedException
*/ */
public function setDefaultColumnWidth(float $width) public function setDefaultColumnWidth(float $width)
{ {
$this->throwIfWorkbookIsNotAvailable(); $this->throwIfWriterAlreadyOpened('Writer must be configured before opening it.');
$this->workbookManager->setDefaultColumnWidth($width); $this->optionsManager->setOption(
Options::DEFAULT_COLUMN_WIDTH,
$width
);
} }
/** /**
* @param float $height * @param float $height
* @throws WriterNotOpenedException * @throws WriterAlreadyOpenedException
*/ */
public function setDefaultRowHeight(float $height) public function setDefaultRowHeight(float $height)
{ {
$this->throwIfWorkbookIsNotAvailable(); $this->throwIfWriterAlreadyOpened('Writer must be configured before opening it.');
$this->workbookManager->setDefaultRowHeight($height); $this->optionsManager->setOption(
Options::DEFAULT_ROW_HEIGHT,
$height
);
} }
/** /**

View File

@ -65,9 +65,6 @@ EOD;
/** @var InternalEntityFactory Factory to create entities */ /** @var InternalEntityFactory Factory to create entities */
private $entityFactory; private $entityFactory;
/** @var bool Whether rows have been written */
private $hasWrittenRows = false;
/** /**
* WorksheetManager constructor. * WorksheetManager constructor.
* *
@ -124,6 +121,22 @@ EOD;
\fwrite($sheetFilePointer, self::SHEET_XML_FILE_HEADER); \fwrite($sheetFilePointer, self::SHEET_XML_FILE_HEADER);
} }
/**
* Writes the sheet data header
*
* @param Worksheet $worksheet The worksheet to add the row to
* @return void
*/
private function ensureSheetDataStated(Worksheet $worksheet) {
if (!$worksheet->getSheetDataStarted()) {
$worksheetFilePointer = $worksheet->getFilePointer();
\fwrite($worksheetFilePointer, $this->getXMLFragmentForDefaultCellSizing());
\fwrite($worksheetFilePointer, $this->getXMLFragmentForColumnWidths());
\fwrite($worksheetFilePointer, '<sheetData>');
$worksheet->setSheetDataStarted(true);
}
}
/** /**
* Checks if the sheet has been sucessfully created. Throws an exception if not. * Checks if the sheet has been sucessfully created. Throws an exception if not.
* *
@ -161,13 +174,8 @@ EOD;
*/ */
private function addNonEmptyRow(Worksheet $worksheet, Row $row) private function addNonEmptyRow(Worksheet $worksheet, Row $row)
{ {
$this->ensureSheetDataStated($worksheet);
$sheetFilePointer = $worksheet->getFilePointer(); $sheetFilePointer = $worksheet->getFilePointer();
if (!$this->hasWrittenRows) {
fwrite($sheetFilePointer, $this->getXMLFragmentForDefaultCellSizing());
fwrite($sheetFilePointer, $this->getXMLFragmentForColumnWidths());
fwrite($sheetFilePointer, '<sheetData>');
}
$rowStyle = $row->getStyle(); $rowStyle = $row->getStyle();
$rowIndexOneBased = $worksheet->getLastWrittenRowIndex() + 1; $rowIndexOneBased = $worksheet->getLastWrittenRowIndex() + 1;
$numCells = $row->getNumCells(); $numCells = $row->getNumCells();
@ -185,7 +193,6 @@ EOD;
if ($wasWriteSuccessful === false) { if ($wasWriteSuccessful === false) {
throw new IOException("Unable to write data in {$worksheet->getFilePath()}"); throw new IOException("Unable to write data in {$worksheet->getFilePath()}");
} }
$this->hasWrittenRows = true;
} }
/** /**
@ -323,10 +330,8 @@ EOD;
if (!\is_resource($worksheetFilePointer)) { if (!\is_resource($worksheetFilePointer)) {
return; return;
} }
$this->ensureSheetDataStated($worksheet);
if ($this->hasWrittenRows) {
\fwrite($worksheetFilePointer, '</sheetData>'); \fwrite($worksheetFilePointer, '</sheetData>');
}
\fwrite($worksheetFilePointer, '</worksheet>'); \fwrite($worksheetFilePointer, '</worksheet>');
\fclose($worksheetFilePointer); \fclose($worksheetFilePointer);
} }