Delay sheetData and add sheetDataStarted flag to worksheet
This commit is contained in:
parent
26e5f966fb
commit
de3241b57c
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -119,9 +119,22 @@ EOD;
|
||||
$worksheet->setFilePointer($sheetFilePointer);
|
||||
|
||||
\fwrite($sheetFilePointer, self::SHEET_XML_FILE_HEADER);
|
||||
\fwrite($sheetFilePointer, $this->getXMLFragmentForDefaultCellSizing());
|
||||
\fwrite($sheetFilePointer, $this->getXMLFragmentForColumnWidths());
|
||||
\fwrite($sheetFilePointer, '<sheetData>');
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -161,6 +174,7 @@ EOD;
|
||||
*/
|
||||
private function addNonEmptyRow(Worksheet $worksheet, Row $row)
|
||||
{
|
||||
$this->ensureSheetDataStated($worksheet);
|
||||
$sheetFilePointer = $worksheet->getFilePointer();
|
||||
$rowStyle = $row->getStyle();
|
||||
$rowIndexOneBased = $worksheet->getLastWrittenRowIndex() + 1;
|
||||
@ -316,7 +330,7 @@ EOD;
|
||||
if (!\is_resource($worksheetFilePointer)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->ensureSheetDataStated($worksheet);
|
||||
\fwrite($worksheetFilePointer, '</sheetData>');
|
||||
\fwrite($worksheetFilePointer, '</worksheet>');
|
||||
\fclose($worksheetFilePointer);
|
||||
|
Loading…
x
Reference in New Issue
Block a user