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 */
private $lastWrittenRowIndex;
/** @var bool has the sheet data header been written */
private $sheetDataStarted = false;
/**
* Worksheet constructor.
*
@ -36,6 +39,7 @@ class Worksheet
$this->externalSheet = $externalSheet;
$this->maxNumColumns = 0;
$this->lastWrittenRowIndex = 0;
$this->sheetDataStarted = false;
}
/**
@ -110,4 +114,20 @@ class Worksheet
// sheet index is zero-based, while ID is 1-based
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
* @throws WriterNotOpenedException
* @throws WriterAlreadyOpenedException
*/
public function setDefaultColumnWidth(float $width)
{
$this->throwIfWorkbookIsNotAvailable();
$this->workbookManager->setDefaultColumnWidth($width);
$this->throwIfWriterAlreadyOpened('Writer must be configured before opening it.');
$this->optionsManager->setOption(
Options::DEFAULT_COLUMN_WIDTH,
$width
);
}
/**
* @param float $height
* @throws WriterNotOpenedException
* @throws WriterAlreadyOpenedException
*/
public function setDefaultRowHeight(float $height)
{
$this->throwIfWorkbookIsNotAvailable();
$this->workbookManager->setDefaultRowHeight($height);
$this->throwIfWriterAlreadyOpened('Writer must be configured before opening it.');
$this->optionsManager->setOption(
Options::DEFAULT_ROW_HEIGHT,
$height
);
}
/**

View File

@ -65,9 +65,6 @@ EOD;
/** @var InternalEntityFactory Factory to create entities */
private $entityFactory;
/** @var bool Whether rows have been written */
private $hasWrittenRows = false;
/**
* WorksheetManager constructor.
*
@ -124,6 +121,22 @@ EOD;
\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.
*
@ -161,13 +174,8 @@ EOD;
*/
private function addNonEmptyRow(Worksheet $worksheet, Row $row)
{
$this->ensureSheetDataStated($worksheet);
$sheetFilePointer = $worksheet->getFilePointer();
if (!$this->hasWrittenRows) {
fwrite($sheetFilePointer, $this->getXMLFragmentForDefaultCellSizing());
fwrite($sheetFilePointer, $this->getXMLFragmentForColumnWidths());
fwrite($sheetFilePointer, '<sheetData>');
}
$rowStyle = $row->getStyle();
$rowIndexOneBased = $worksheet->getLastWrittenRowIndex() + 1;
$numCells = $row->getNumCells();
@ -185,7 +193,6 @@ EOD;
if ($wasWriteSuccessful === false) {
throw new IOException("Unable to write data in {$worksheet->getFilePath()}");
}
$this->hasWrittenRows = true;
}
/**
@ -323,10 +330,8 @@ EOD;
if (!\is_resource($worksheetFilePointer)) {
return;
}
if ($this->hasWrittenRows) {
$this->ensureSheetDataStated($worksheet);
\fwrite($worksheetFilePointer, '</sheetData>');
}
\fwrite($worksheetFilePointer, '</worksheet>');
\fclose($worksheetFilePointer);
}