Vendor/phpspreadsheet/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Worksheet.php
public function close()
    {
        $phpSheet = $this->phpSheet;

        // Write BOF record
        $this->storeBof(0x0010);

        // Write PRINTHEADERS
        $this->writePrintHeaders();

        // Write PRINTGRIDLINES
        $this->writePrintGridlines();

        // Write GRIDSET
        $this->writeGridset();

        // Calculate column widths
        $phpSheet->calculateColumnWidths();

        // Column dimensions
        if (($defaultWidth = $phpSheet->getDefaultColumnDimension()->getWidth()) < 0) {
            $defaultWidth = \PhpOffice\PhpSpreadsheet\Shared\Font::getDefaultColumnWidthByFont($phpSheet->getParent()->getDefaultStyle()->getFont());
        }

        $columnDimensions = $phpSheet->getColumnDimensions();
        $maxCol = $this->lastColumnIndex - 1;
        for ($i = 0; $i <= $maxCol; ++$i) {
            $hidden = 0;
            $level = 0;
            $xfIndex = 15; // there are 15 cell style Xfs

            $width = $defaultWidth;

            $columnLetter = Coordinate::stringFromColumnIndex($i + 1);
            if (isset($columnDimensions[$columnLetter])) {
                $columnDimension = $columnDimensions[$columnLetter];
                if ($columnDimension->getWidth() >= 0) {
                    $width = $columnDimension->getWidth();
                }
                $hidden = $columnDimension->getVisible() ? 0 : 1;
                $level = $columnDimension->getOutlineLevel();
                $xfIndex = $columnDimension->getXfIndex() + 15; // there are 15 cell style Xfs
            }

            // Components of columnInfo:
            // $firstcol first column on the range
            // $lastcol  last column on the range
            // $width    width to set
            // $xfIndex  The optional cell style Xf index to apply to the columns
            // $hidden   The optional hidden atribute
            // $level    The optional outline level
            $this->columnInfo[] = [$i, $i, $width, $xfIndex, $hidden, $level];
        }

        // Write GUTS
        $this->writeGuts();

        // Write DEFAULTROWHEIGHT
        $this->writeDefaultRowHeight();
        // Write WSBOOL
        $this->writeWsbool();
        // Write horizontal and vertical page breaks
        $this->writeBreaks();
        // Write page header
        $this->writeHeader();
        // Write page footer
        $this->writeFooter();
        // Write page horizontal centering
        $this->writeHcenter();
        // Write page vertical centering
        $this->writeVcenter();
        // Write left margin
        $this->writeMarginLeft();
        // Write right margin
        $this->writeMarginRight();
        // Write top margin
        $this->writeMarginTop();
        // Write bottom margin
        $this->writeMarginBottom();
        // Write page setup
        $this->writeSetup();
        // Write sheet protection
        $this->writeProtect();
        // Write SCENPROTECT
        $this->writeScenProtect();
        // Write OBJECTPROTECT
        $this->writeObjectProtect();
        // Write sheet password
        $this->writePassword();
        // Write DEFCOLWIDTH record
        $this->writeDefcol();

        // Write the COLINFO records if they exist
        if (!empty($this->columnInfo)) {
            $colcount = count($this->columnInfo);
            for ($i = 0; $i < $colcount; ++$i) {
                $this->writeColinfo($this->columnInfo[$i]);
            }
        }
        $autoFilterRange = $phpSheet->getAutoFilter()->getRange();
        if (!empty($autoFilterRange)) {
            // Write AUTOFILTERINFO
            $this->writeAutoFilterInfo();
        }

        // Write sheet dimensions
        $this->writeDimensions();

        // Row dimensions
        foreach ($phpSheet->getRowDimensions() as $rowDimension) {
            $xfIndex = $rowDimension->getXfIndex() + 15; // there are 15 cellXfs
            $this->writeRow($rowDimension->getRowIndex() - 1, $rowDimension->getRowHeight(), $xfIndex, ($rowDimension->getVisible() ? '0' : '1'), $rowDimension->getOutlineLevel());
        }

        // Write Cells
        foreach ($phpSheet->getCoordinates() as $coordinate) {
            $cell = $phpSheet->getCell($coordinate);
            $row = $cell->getRow() - 1;
            $column = Coordinate::columnIndexFromString($cell->getColumn()) - 1;

            // Don't break Excel break the code!
            if ($row > 65535 || $column > 255) {
                throw new WriterException('Rows or columns overflow! Excel5 has limit to 65535 rows and 255 columns. Use XLSX instead.');
            }

            // Write cell value
            $xfIndex = $cell->getXfIndex() + 15; // there are 15 cell style Xfs

            $cVal = $cell->getValue();
            if ($cVal instanceof RichText) {
                $arrcRun = [];
                $str_len = StringHelper::countCharacters($cVal->getPlainText(), 'UTF-8');
                $str_pos = 0;
                $elements = $cVal->getRichTextElements();
                foreach ($elements as $element) {
                    // FONT Index
                    if ($element instanceof Run) {
                        $str_fontidx = $this->fontHashIndex[$element->getFont()->getHashCode()];
                    } else {
                        $str_fontidx = 0;
                    }
                    $arrcRun[] = ['strlen' => $str_pos, 'fontidx' => $str_fontidx];
                    // Position FROM
                    $str_pos += StringHelper::countCharacters($element->getText(), 'UTF-8');
                }
                $this->writeRichTextString($row, $column, $cVal->getPlainText(), $xfIndex, $arrcRun);
            } else {
                switch ($cell->getDatatype()) {
                    case DataType::TYPE_STRING:
                    case DataType::TYPE_NULL:
                        if ($cVal === '' || $cVal === null) {
                            $this->writeBlank($row, $column, $xfIndex);
                        } else {
                            $this->writeString($row, $column, $cVal, $xfIndex);
                        }

                        break;
                    case DataType::TYPE_NUMERIC:
                        $this->writeNumber($row, $column, $cVal, $xfIndex);

                        break;
                    case DataType::TYPE_FORMULA:
                        $calculatedValue = $this->preCalculateFormulas ?
                            $cell->getCalculatedValue() : null;
                        $this->writeFormula($row, $column, $cVal, $xfIndex, $calculatedValue);

                        break;
                    case DataType::TYPE_BOOL:
                        $this->writeBoolErr($row, $column, $cVal, 0, $xfIndex);

                        break;
                    case DataType::TYPE_ERROR:
                        $this->writeBoolErr($row, $column, self::mapErrorCode($cVal), 1, $xfIndex);

                        break;
                }
            }
        }

        // Append
        $this->writeMsoDrawing();

        // Write WINDOW2 record
        $this->writeWindow2();

        // Write PLV record
        $this->writePageLayoutView();

        // Write ZOOM record
        $this->writeZoom();
        if ($phpSheet->getFreezePane()) {
            $this->writePanes();
        }

        // Write SELECTION record
        $this->writeSelection();

        // Write MergedCellsTable Record
        $this->writeMergedCells();

        // Hyperlinks
        foreach ($phpSheet->getHyperLinkCollection() as $coordinate => $hyperlink) {
            list($column, $row) = Coordinate::coordinateFromString($coordinate);

            $url = $hyperlink->getUrl();

            if (strpos($url, 'sheet://') !== false) {
                // internal to current workbook
                $url = str_replace('sheet://', 'internal:', $url);
            } elseif (preg_match('/^(http:|https:|ftp:|mailto:)/', $url)) {
                // URL
            } else {
                // external (local file)
                $url = 'external:' . $url;
            }

            $this->writeUrl($row - 1, Coordinate::columnIndexFromString($column) - 1, $url);
        }

        $this->writeDataValidity();
        $this->writeSheetLayout();

        // Write SHEETPROTECTION record
        $this->writeSheetProtection();
        $this->writeRangeProtection();

        $arrConditionalStyles = $phpSheet->getConditionalStylesCollection();
        if (!empty($arrConditionalStyles)) {
            $arrConditional = [];
            // @todo CFRule & CFHeader
            // Write CFHEADER record
            $this->writeCFHeader();
            // Write ConditionalFormattingTable records
            foreach ($arrConditionalStyles as $cellCoordinate => $conditionalStyles) {
                foreach ($conditionalStyles as $conditional) {
                    if ($conditional->getConditionType() == Conditional::CONDITION_EXPRESSION
                        || $conditional->getConditionType() == Conditional::CONDITION_CELLIS) {
                        if (!isset($arrConditional[$conditional->getHashCode()])) {
                            // This hash code has been handled
                            $arrConditional[$conditional->getHashCode()] = true;

                            // Write CFRULE record
                            $this->writeCFRule($conditional);
                        }
                    }
                }
            }
        }

        $this->storeEof();
    }
public function close()
    {
        $phpSheet = $this->phpSheet;

        // Write BOF record
        $this->storeBof(0x0010);

        // Write PRINTHEADERS
        $this->writePrintHeaders();

        // Write PRINTGRIDLINES
        $this->writePrintGridlines();

        // Write GRIDSET
        $this->writeGridset();

        // Calculate column widths
        $phpSheet->calculateColumnWidths();

        // Column dimensions
        if (($defaultWidth = $phpSheet->getDefaultColumnDimension()->getWidth()) < 0) {
            $defaultWidth = \PhpOffice\PhpSpreadsheet\Shared\Font::getDefaultColumnWidthByFont($phpSheet->getParent()->getDefaultStyle()->getFont());
        }

        $columnDimensions = $phpSheet->getColumnDimensions();
        $maxCol = $this->lastColumnIndex - 1;
        for ($i = 0; $i <= $maxCol; ++$i) {
            $hidden = 0;
            $level = 0;
            $xfIndex = 15; // there are 15 cell style Xfs

            $width = $defaultWidth;

            $columnLetter = Coordinate::stringFromColumnIndex($i + 1);
            if (isset($columnDimensions[$columnLetter])) {
                $columnDimension = $columnDimensions[$columnLetter];
                if ($columnDimension->getWidth() >= 0) {
                    $width = $columnDimension->getWidth();
                }
                $hidden = $columnDimension->getVisible() ? 0 : 1;
                $level = $columnDimension->getOutlineLevel();
                $xfIndex = $columnDimension->getXfIndex() + 15; // there are 15 cell style Xfs
            }

            // Components of columnInfo:
            // $firstcol first column on the range
            // $lastcol  last column on the range
            // $width    width to set
            // $xfIndex  The optional cell style Xf index to apply to the columns
            // $hidden   The optional hidden atribute
            // $level    The optional outline level
            $this->columnInfo[] = [$i, $i, $width, $xfIndex, $hidden, $level];
        }

        // Write GUTS
        $this->writeGuts();

        // Write DEFAULTROWHEIGHT
        $this->writeDefaultRowHeight();
        // Write WSBOOL
        $this->writeWsbool();
        // Write horizontal and vertical page breaks
        $this->writeBreaks();
        // Write page header
        $this->writeHeader();
        // Write page footer
        $this->writeFooter();
        // Write page horizontal centering
        $this->writeHcenter();
        // Write page vertical centering
        $this->writeVcenter();
        // Write left margin
        $this->writeMarginLeft();
        // Write right margin
        $this->writeMarginRight();
        // Write top margin
        $this->writeMarginTop();
        // Write bottom margin
        $this->writeMarginBottom();
        // Write page setup
        $this->writeSetup();
        // Write sheet protection
        $this->writeProtect();
        // Write SCENPROTECT
        $this->writeScenProtect();
        // Write OBJECTPROTECT
        $this->writeObjectProtect();
        // Write sheet password
        $this->writePassword();
        // Write DEFCOLWIDTH record
        $this->writeDefcol();

        // Write the COLINFO records if they exist
        if (!empty($this->columnInfo)) {
            $colcount = count($this->columnInfo);
            for ($i = 0; $i < $colcount; ++$i) {
                $this->writeColinfo($this->columnInfo[$i]);
            }
        }
        $autoFilterRange = $phpSheet->getAutoFilter()->getRange();
        if (!empty($autoFilterRange)) {
            // Write AUTOFILTERINFO
            $this->writeAutoFilterInfo();
        }

        // Write sheet dimensions
        $this->writeDimensions();

        // Row dimensions
        foreach ($phpSheet->getRowDimensions() as $rowDimension) {
            $xfIndex = $rowDimension->getXfIndex() + 15; // there are 15 cellXfs
            $this->writeRow($rowDimension->getRowIndex() - 1, $rowDimension->getRowHeight(), $xfIndex, ($rowDimension->getVisible() ? '0' : '1'), $rowDimension->getOutlineLevel());
        }

        // Write Cells
        foreach ($phpSheet->getCoordinates() as $coordinate) {
            $cell = $phpSheet->getCell($coordinate);
            $row = $cell->getRow() - 1;
            $column = Coordinate::columnIndexFromString($cell->getColumn()) - 1;

            // Don't break Excel break the code!
            if ($row > 65535 || $column > 255) {
                throw new WriterException('Rows or columns overflow! Excel5 has limit to 65535 rows and 255 columns. Use XLSX instead.');
            }

            // Write cell value
            $xfIndex = $cell->getXfIndex() + 15; // there are 15 cell style Xfs

            $cVal = $cell->getValue();
            if ($cVal instanceof RichText) {
                $arrcRun = [];
                $str_len = StringHelper::countCharacters($cVal->getPlainText(), 'UTF-8');
                $str_pos = 0;
                $elements = $cVal->getRichTextElements();
                foreach ($elements as $element) {
                    // FONT Index
                    if ($element instanceof Run) {
                        $str_fontidx = $this->fontHashIndex[$element->getFont()->getHashCode()];
                    } else {
                        $str_fontidx = 0;
                    }
                    $arrcRun[] = ['strlen' => $str_pos, 'fontidx' => $str_fontidx];
                    // Position FROM
                    $str_pos += StringHelper::countCharacters($element->getText(), 'UTF-8');
                }
                $this->writeRichTextString($row, $column, $cVal->getPlainText(), $xfIndex, $arrcRun);
            } else {
                switch ($cell->getDatatype()) {
                    case DataType::TYPE_STRING:
                    case DataType::TYPE_NULL:
                        if ($cVal === '' || $cVal === null) {
                            $this->writeBlank($row, $column, $xfIndex);
                        } else {
                            $this->writeString($row, $column, $cVal, $xfIndex);
                        }

                        break;
                    case DataType::TYPE_NUMERIC:
                        $this->writeNumber($row, $column, $cVal, $xfIndex);

                        break;
                    case DataType::TYPE_FORMULA:
                        $calculatedValue = $this->preCalculateFormulas ?
                            $cell->getCalculatedValue() : null;
                        $this->writeFormula($row, $column, $cVal, $xfIndex, $calculatedValue);

                        break;
                    case DataType::TYPE_BOOL:
                        $this->writeBoolErr($row, $column, $cVal, 0, $xfIndex);

                        break;
                    case DataType::TYPE_ERROR:
                        $this->writeBoolErr($row, $column, self::mapErrorCode($cVal), 1, $xfIndex);

                        break;
                }
            }
        }

        // Append
        $this->writeMsoDrawing();

        // Write WINDOW2 record
        $this->writeWindow2();

        // Write PLV record
        $this->writePageLayoutView();

        // Write ZOOM record
        $this->writeZoom();
        if ($phpSheet->getFreezePane()) {
            $this->writePanes();
        }

        // Write SELECTION record
        $this->writeSelection();

        // Write MergedCellsTable Record
        $this->writeMergedCells();

        // Hyperlinks
        foreach ($phpSheet->getHyperLinkCollection() as $coordinate => $hyperlink) {
            list($column, $row) = Coordinate::coordinateFromString($coordinate);

            $url = $hyperlink->getUrl();

            if (strpos($url, 'sheet://') !== false) {
                // internal to current workbook
                $url = str_replace('sheet://', 'internal:', $url);
            } elseif (preg_match('/^(http:|https:|ftp:|mailto:)/', $url)) {
                // URL
            } else {
                // external (local file)
                $url = 'external:' . $url;
            }

            $this->writeUrl($row - 1, Coordinate::columnIndexFromString($column) - 1, $url);
        }

        $this->writeDataValidity();
        $this->writeSheetLayout();

        // Write SHEETPROTECTION record
        $this->writeSheetProtection();
        $this->writeRangeProtection();

        $arrConditionalStyles = $phpSheet->getConditionalStylesCollection();
        if (!empty($arrConditionalStyles)) {
            $arrConditional = [];
            // @todo CFRule & CFHeader
            // Write CFHEADER record
            $this->writeCFHeader();
            // Write ConditionalFormattingTable records
            foreach ($arrConditionalStyles as $cellCoordinate => $conditionalStyles) {
                foreach ($conditionalStyles as $conditional) {
                    if ($conditional->getConditionType() == Conditional::CONDITION_EXPRESSION
                        || $conditional->getConditionType() == Conditional::CONDITION_CELLIS) {
                        if (!isset($arrConditional[$conditional->getHashCode()])) {
                            // This hash code has been handled
                            $arrConditional[$conditional->getHashCode()] = true;

                            // Write CFRULE record
                            $this->writeCFRule($conditional);
                        }
                    }
                }
            }
        }

        $this->storeEof();
    }
public function close ( ) { $ phpSheet = $ this -> phpSheet ; // Write BOF record $ this -> storeBof ( 0x0010 ) ; // Write PRINTHEADERS $ this -> writePrintHeaders ( ) ; // Write PRINTGRIDLINES $ this -> writePrintGridlines ( ) ; // Write GRIDSET $ this -> writeGridset ( ) ; // Calculate column widths $ phpSheet -> calculateColumnWidths ( ) ; // Column dimensions if ( ( $ defaultWidth = $ phpSheet -> getDefaultColumnDimension ( ) -> getWidth ( ) ) < 0 ) { $ defaultWidth = \ PhpOffice \ PhpSpreadsheet \ Shared \ Font :: getDefaultColumnWidthByFont ( $ phpSheet -> getParent ( ) -> getDefaultStyle ( ) -> getFont ( ) ) ; } $ columnDimensions = $ phpSheet -> getColumnDimensions ( ) ; $ maxCol = $ this -> lastColumnIndex - 1 ; for ( $ i = 0 ; $ i <= $ maxCol ; ++ $ i ) { $ hidden = 0 ; $ level = 0 ; $ xfIndex = 15 ; // there are 15 cell style Xfs $ width = $ defaultWidth ; $ columnLetter = Coordinate :: stringFromColumnIndex ( $ i + 1 ) ; if ( isset ( $ columnDimensions [ $ columnLetter ] ) ) { $ columnDimension = $ columnDimensions [ $ columnLetter ] ; if ( $ columnDimension -> getWidth ( ) >= 0 ) { $ width = $ columnDimension -> getWidth ( ) ; } $ hidden = $ columnDimension -> getVisible ( ) ? 0 : 1 ; $ level = $ columnDimension -> getOutlineLevel ( ) ; $ xfIndex = $ columnDimension -> getXfIndex ( ) + 15 ; // there are 15 cell style Xfs } // Components of columnInfo: // $firstcol first column on the range // $lastcol  last column on the range // $width    width to set // $xfIndex  The optional cell style Xf index to apply to the columns // $hidden   The optional hidden atribute // $level    The optional outline level $ this -> columnInfo [ ] = [ $ i , $ i , $ width , $ xfIndex , $ hidden , $ level ] ; } // Write GUTS $ this -> writeGuts ( ) ; // Write DEFAULTROWHEIGHT $ this -> writeDefaultRowHeight ( ) ; // Write WSBOOL $ this -> writeWsbool ( ) ; // Write horizontal and vertical page breaks $ this -> writeBreaks ( ) ; // Write page header $ this -> writeHeader ( ) ; // Write page footer $ this -> writeFooter ( ) ; // Write page horizontal centering $ this -> writeHcenter ( ) ; // Write page vertical centering $ this -> writeVcenter ( ) ; // Write left margin $ this -> writeMarginLeft ( ) ; // Write right margin $ this -> writeMarginRight ( ) ; // Write top margin $ this -> writeMarginTop ( ) ; // Write bottom margin $ this -> writeMarginBottom ( ) ; // Write page setup $ this -> writeSetup ( ) ; // Write sheet protection $ this -> writeProtect ( ) ; // Write SCENPROTECT $ this -> writeScenProtect ( ) ; // Write OBJECTPROTECT $ this -> writeObjectProtect ( ) ; // Write sheet password $ this -> writePassword ( ) ; // Write DEFCOLWIDTH record $ this -> writeDefcol ( ) ; // Write the COLINFO records if they exist if ( ! empty ( $ this -> columnInfo ) ) { $ colcount = count ( $ this -> columnInfo ) ; for ( $ i = 0 ; $ i < $ colcount ; ++ $ i ) { $ this -> writeColinfo ( $ this -> columnInfo [ $ i ] ) ; } } $ autoFilterRange = $ phpSheet -> getAutoFilter ( ) -> getRange ( ) ; if ( ! empty ( $ autoFilterRange ) ) { // Write AUTOFILTERINFO $ this -> writeAutoFilterInfo ( ) ; } // Write sheet dimensions $ this -> writeDimensions ( ) ; // Row dimensions foreach ( $ phpSheet -> getRowDimensions ( ) as $ rowDimension ) { $ xfIndex = $ rowDimension -> getXfIndex ( ) + 15 ; // there are 15 cellXfs $ this -> writeRow ( $ rowDimension -> getRowIndex ( ) - 1 , $ rowDimension -> getRowHeight ( ) , $ xfIndex , ( $ rowDimension -> getVisible ( ) ? '0' : '1' ) , $ rowDimension -> getOutlineLevel ( ) ) ; } // Write Cells foreach ( $ phpSheet -> getCoordinates ( ) as $ coordinate ) { $ cell = $ phpSheet -> getCell ( $ coordinate ) ; $ row = $ cell -> getRow ( ) - 1 ; $ column = Coordinate :: columnIndexFromString ( $ cell -> getColumn ( ) ) - 1 ; // Don't break Excel break the code! if ( $ row > 65535 || $ column > 255 ) { throw new WriterException ( 'Rows or columns overflow! Excel5 has limit to 65535 rows and 255 columns. Use XLSX instead.' ) ; } // Write cell value $ xfIndex = $ cell -> getXfIndex ( ) + 15 ; // there are 15 cell style Xfs $ cVal = $ cell -> getValue ( ) ; if ( $ cVal instanceof RichText ) { $ arrcRun = [ ] ; $ str_len = StringHelper :: countCharacters ( $ cVal -> getPlainText ( ) , 'UTF-8' ) ; $ str_pos = 0 ; $ elements = $ cVal -> getRichTextElements ( ) ; foreach ( $ elements as $ element ) { // FONT Index if ( $ element instanceof Run ) { $ str_fontidx = $ this -> fontHashIndex [ $ element -> getFont ( ) -> getHashCode ( ) ] ; } else { $ str_fontidx = 0 ; } $ arrcRun [ ] = [ 'strlen' => $ str_pos , 'fontidx' => $ str_fontidx ] ; // Position FROM $ str_pos += StringHelper :: countCharacters ( $ element -> getText ( ) , 'UTF-8' ) ; } $ this -> writeRichTextString ( $ row , $ column , $ cVal -> getPlainText ( ) , $ xfIndex , $ arrcRun ) ; } else { switch ( $ cell -> getDatatype ( ) ) { case DataType :: TYPE_STRING : case DataType :: TYPE_NULL : if ( $ cVal === '' || $ cVal === null ) { $ this -> writeBlank ( $ row , $ column , $ xfIndex ) ; } else { $ this -> writeString ( $ row , $ column , $ cVal , $ xfIndex ) ; } break ; case DataType :: TYPE_NUMERIC : $ this -> writeNumber ( $ row , $ column , $ cVal , $ xfIndex ) ; break ; case DataType :: TYPE_FORMULA : $ calculatedValue = $ this -> preCalculateFormulas ? $ cell -> getCalculatedValue ( ) : null ; $ this -> writeFormula ( $ row , $ column , $ cVal , $ xfIndex , $ calculatedValue ) ; break ; case DataType :: TYPE_BOOL : $ this -> writeBoolErr ( $ row , $ column , $ cVal , 0 , $ xfIndex ) ; break ; case DataType :: TYPE_ERROR : $ this -> writeBoolErr ( $ row , $ column , self :: mapErrorCode ( $ cVal ) , 1 , $ xfIndex ) ; break ; } } } // Append $ this -> writeMsoDrawing ( ) ; // Write WINDOW2 record $ this -> writeWindow2 ( ) ; // Write PLV record $ this -> writePageLayoutView ( ) ; // Write ZOOM record $ this -> writeZoom ( ) ; if ( $ phpSheet -> getFreezePane ( ) ) { $ this -> writePanes ( ) ; } // Write SELECTION record $ this -> writeSelection ( ) ; // Write MergedCellsTable Record $ this -> writeMergedCells ( ) ; // Hyperlinks foreach ( $ phpSheet -> getHyperLinkCollection ( ) as $ coordinate => $ hyperlink ) { list ( $ column , $ row ) = Coordinate :: coordinateFromString ( $ coordinate ) ; $ url = $ hyperlink -> getUrl ( ) ; if ( strpos ( $ url , 'sheet://' ) !== false ) { // internal to current workbook $ url = str_replace ( 'sheet://' , 'internal:' , $ url ) ; } elseif ( preg_match ( '/^(http:|https:|ftp:|mailto:)/' , $ url ) ) { // URL } else { // external (local file) $ url = 'external:' . $ url ; } $ this -> writeUrl ( $ row - 1 , Coordinate :: columnIndexFromString ( $ column ) - 1 , $ url ) ; } $ this -> writeDataValidity ( ) ; $ this -> writeSheetLayout ( ) ; // Write SHEETPROTECTION record $ this -> writeSheetProtection ( ) ; $ this -> writeRangeProtection ( ) ; $ arrConditionalStyles = $ phpSheet -> getConditionalStylesCollection ( ) ; if ( ! empty ( $ arrConditionalStyles ) ) { $ arrConditional = [ ] ; // @todo CFRule & CFHeader // Write CFHEADER record $ this -> writeCFHeader ( ) ; // Write ConditionalFormattingTable records foreach ( $ arrConditionalStyles as $ cellCoordinate => $ conditionalStyles ) { foreach ( $ conditionalStyles as $ conditional ) { if ( $ conditional -> getConditionType ( ) == Conditional :: CONDITION_EXPRESSION || $ conditional -> getConditionType ( ) == Conditional :: CONDITION_CELLIS ) { if ( ! isset ( $ arrConditional [ $ conditional -> getHashCode ( ) ] ) ) { // This hash code has been handled $ arrConditional [ $ conditional -> getHashCode ( ) ] = true ; // Write CFRULE record $ this -> writeCFRule ( $ conditional ) ; } } } } } $ this -> storeEof ( ) ; }
Add data to the beginning of the workbook (note the reverse order)
and to the end of the workbook.

@see \PhpOffice\PhpSpreadsheet\Writer\Xls\Workbook::storeWorkbook()
Add data to the beginning of the workbook ( note the reverse order ) and to the end of the workbook .