Source for file Worksheet.php
Documentation is available at Worksheet.php 
 * Copyright (c) 2006 - 2011 PHPExcel  
 * This library is free software; you can redistribute it and/or  
 * modify it under the terms of the GNU Lesser General Public  
 * License as published by the Free Software Foundation; either  
 * version 2.1 of the License, or (at your option) any later version.  
 * This library is distributed in the hope that it will be useful,  
 * but WITHOUT ANY WARRANTY; without even the implied warranty of  
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  
 * Lesser General Public License for more details.  
 * You should have received a copy of the GNU Lesser General Public  
 * License along with this library; if not, write to the Free Software  
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA  
 * @package    PHPExcel_Writer_Excel2007  
 * @copyright  Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)  
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL  
 * @version    1.7.6, 2011-02-27  
 * PHPExcel_Writer_Excel2007_Worksheet  
 * @package    PHPExcel_Writer_Excel2007  
 * @copyright  Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)  
     * Write worksheet to XML format  
     * @param    PHPExcel_Worksheet        $pSheet   
     * @param    string[]                $pStringTable   
     * @return    string                    XML Output  
            $objWriter->startDocument('1.0','UTF-8','yes');  
            $objWriter->startElement('worksheet');  
            $objWriter->writeAttribute('xml:space', 'preserve');  
            $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main');  
            $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');  
                $this->_writeSheetPr($objWriter, $pSheet);  
                $this->_writeDimension($objWriter, $pSheet);  
                $this->_writeSheetViews($objWriter, $pSheet);  
                $this->_writeSheetFormatPr($objWriter, $pSheet);  
                $this->_writeCols($objWriter, $pSheet);  
                $this->_writeSheetData($objWriter, $pSheet, $pStringTable);  
                $this->_writeSheetProtection($objWriter, $pSheet);  
                $this->_writeProtectedRanges($objWriter, $pSheet);  
                $this->_writeAutoFilter($objWriter, $pSheet);  
                $this->_writeMergeCells($objWriter, $pSheet);  
                $this->_writeConditionalFormatting($objWriter, $pSheet);  
                $this->_writeDataValidations($objWriter, $pSheet);  
                $this->_writeHyperlinks($objWriter, $pSheet);  
                $this->_writePrintOptions($objWriter, $pSheet);  
                $this->_writePageMargins($objWriter, $pSheet);  
                $this->_writePageSetup($objWriter, $pSheet);  
                $this->_writeHeaderFooter($objWriter, $pSheet);  
                $this->_writeBreaks($objWriter, $pSheet);  
                $this->_writeDrawings($objWriter, $pSheet);  
                $this->_writeLegacyDrawing($objWriter, $pSheet);  
                $this->_writeLegacyDrawingHF($objWriter, $pSheet);  
            $objWriter->endElement();  
            return $objWriter->getData();  
            throw  new Exception("Invalid PHPExcel_Worksheet object passed."); 
     * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                $pSheet            Worksheet  
    private function _writeSheetPr(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        $objWriter->startElement('sheetPr');  
        //$objWriter->writeAttribute('codeName',        $pSheet->getTitle());  
            if ($pSheet->isTabColorSet()) {  
                $objWriter->startElement('tabColor');  
                $objWriter->writeAttribute('rgb',    $pSheet->getTabColor()->getARGB());  
                $objWriter->endElement();  
            $objWriter->startElement('outlinePr');  
            $objWriter->writeAttribute('summaryBelow',    ($pSheet->getShowSummaryBelow() ?  '1' :  '0'));  
            $objWriter->writeAttribute('summaryRight',    ($pSheet->getShowSummaryRight() ?  '1' :  '0'));  
            $objWriter->endElement();  
            if ($pSheet->getPageSetup()->getFitToPage()) {  
                $objWriter->startElement('pageSetUpPr');  
                $objWriter->writeAttribute('fitToPage',    '1');  
                $objWriter->endElement();  
        $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter    $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet            $pSheet            Worksheet  
    private function _writeDimension(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        $objWriter->startElement('dimension');  
        $objWriter->writeAttribute('ref', $pSheet->calculateWorksheetDimension());  
        $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                    $pSheet            Worksheet  
    private function _writeSheetViews(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        $objWriter->startElement('sheetViews');  
            $objWriter->startElement('sheetView');  
            $objWriter->writeAttribute('tabSelected',        $sheetSelected ?  '1' :  '0');  
            $objWriter->writeAttribute('workbookViewId',    '0');  
                if ($pSheet->getSheetView()->getZoomScale() !=  100) {  
                    $objWriter->writeAttribute('zoomScale',    $pSheet->getSheetView()->getZoomScale());  
                if ($pSheet->getSheetView()->getZoomScaleNormal() !=  100) {  
                    $objWriter->writeAttribute('zoomScaleNormal',    $pSheet->getSheetView()->getZoomScaleNormal());  
                if ($pSheet->getShowGridlines()) {  
                    $objWriter->writeAttribute('showGridLines',    'true');  
                    $objWriter->writeAttribute('showGridLines',    'false');  
                // Row and column headers  
                if ($pSheet->getShowRowColHeaders()) {  
                    $objWriter->writeAttribute('showRowColHeaders', '1');  
                    $objWriter->writeAttribute('showRowColHeaders', '0');  
                if ($pSheet->getRightToLeft()) {  
                    $objWriter->writeAttribute('rightToLeft',    'true');  
                $activeCell =  $pSheet->getActiveCell();  
                $topLeftCell =  $pSheet->getFreezePane();  
                if (($topLeftCell !=  '') &&  ($topLeftCell !=  'A1')) {  
                    $activeCell =  $topLeftCell;  
                    // Calculate freeze coordinates  
                    $objWriter->startElement('pane');  
                        $objWriter->writeAttribute('xSplit',    $xSplit -  1);  
                        $objWriter->writeAttribute('ySplit',    $ySplit -  1);  
                        $pane =  ($xSplit >  1) ?  'bottomRight' :  'bottomLeft';  
                    $objWriter->writeAttribute('topLeftCell',    $topLeftCell);  
                    $objWriter->writeAttribute('activePane',    $pane);  
                    $objWriter->writeAttribute('state',        'frozen');  
                    $objWriter->endElement();  
                    if (($xSplit >  1) &&  ($ySplit >  1)) {  
                        //    Write additional selections if more than two panes (ie both an X and a Y split)  
                        $objWriter->startElement('selection');    $objWriter->writeAttribute('pane', 'topRight');        $objWriter->endElement();  
                        $objWriter->startElement('selection');    $objWriter->writeAttribute('pane', 'bottomLeft');    $objWriter->endElement();  
                    //    Only need to write selection element if we have a split pane  
                    //        We cheat a little by over-riding the active cell selection, setting it to the split cell  
                    $objWriter->startElement('selection');  
                    $objWriter->writeAttribute('pane', $pane);  
                    $objWriter->writeAttribute('activeCell', $activeCell);  
                    $objWriter->writeAttribute('sqref', $activeCell);  
                    $objWriter->endElement();  
            $objWriter->endElement();  
        $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet          $pSheet            Worksheet  
    private function _writeSheetFormatPr(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        $objWriter->startElement('sheetFormatPr');  
            if ($pSheet->getDefaultRowDimension()->getRowHeight() >=  0) {  
                $objWriter->writeAttribute('customHeight',        'true');  
                $objWriter->writeAttribute('defaultRowHeight', '12.75');  
            if ($pSheet->getDefaultColumnDimension()->getWidth() >=  0) {  
            foreach ($pSheet->getRowDimensions() as $dimension) {  
                if ($dimension->getOutlineLevel() >  $outlineLevelRow) {  
                    $outlineLevelRow =  $dimension->getOutlineLevel();  
            $objWriter->writeAttribute('outlineLevelRow',    (int) $outlineLevelRow);  
            // Outline level - column  
            foreach ($pSheet->getColumnDimensions() as $dimension) {  
                if ($dimension->getOutlineLevel() >  $outlineLevelCol) {  
                    $outlineLevelCol =  $dimension->getOutlineLevel();  
            $objWriter->writeAttribute('outlineLevelCol',    (int) $outlineLevelCol);  
        $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                    $pSheet            Worksheet  
    private function _writeCols(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        if (count($pSheet->getColumnDimensions()) >  0)  {  
            $objWriter->startElement('cols');  
                $pSheet->calculateColumnWidths();  
                // Loop through column dimensions  
                foreach ($pSheet->getColumnDimensions() as $colDimension) {  
                    $objWriter->startElement('col');  
                    if ($colDimension->getWidth() <  0) {  
                        // No width set, apply default of 10  
                        $objWriter->writeAttribute('width',        '9.10');  
                    if ($colDimension->getVisible() ==  false) {  
                        $objWriter->writeAttribute('hidden',        'true');  
                    if ($colDimension->getAutoSize()) {  
                        $objWriter->writeAttribute('bestFit',        'true');  
                    if ($colDimension->getWidth() !=  $pSheet->getDefaultColumnDimension()->getWidth()) {  
                        $objWriter->writeAttribute('customWidth',    'true');  
                    if ($colDimension->getCollapsed() ==  true) {  
                        $objWriter->writeAttribute('collapsed',        'true');  
                    if ($colDimension->getOutlineLevel() >  0) {  
                        $objWriter->writeAttribute('outlineLevel',    $colDimension->getOutlineLevel());  
                    $objWriter->writeAttribute('style', $colDimension->getXfIndex());  
                    $objWriter->endElement();  
            $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                    $pSheet            Worksheet  
    private function _writeSheetProtection(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        $objWriter->startElement('sheetProtection');  
        if ($pSheet->getProtection()->getPassword() !=  '') {  
            $objWriter->writeAttribute('password',                $pSheet->getProtection()->getPassword());  
        $objWriter->writeAttribute('sheet',                ($pSheet->getProtection()->getSheet()                ?  'true' :  'false'));  
        $objWriter->writeAttribute('objects',                ($pSheet->getProtection()->getObjects()            ?  'true' :  'false'));  
        $objWriter->writeAttribute('scenarios',            ($pSheet->getProtection()->getScenarios()            ?  'true' :  'false'));  
        $objWriter->writeAttribute('formatCells',            ($pSheet->getProtection()->getFormatCells()        ?  'true' :  'false'));  
        $objWriter->writeAttribute('formatColumns',        ($pSheet->getProtection()->getFormatColumns()        ?  'true' :  'false'));  
        $objWriter->writeAttribute('formatRows',            ($pSheet->getProtection()->getFormatRows()            ?  'true' :  'false'));  
        $objWriter->writeAttribute('insertColumns',        ($pSheet->getProtection()->getInsertColumns()        ?  'true' :  'false'));  
        $objWriter->writeAttribute('insertRows',            ($pSheet->getProtection()->getInsertRows()            ?  'true' :  'false'));  
        $objWriter->writeAttribute('insertHyperlinks',        ($pSheet->getProtection()->getInsertHyperlinks()    ?  'true' :  'false'));  
        $objWriter->writeAttribute('deleteColumns',        ($pSheet->getProtection()->getDeleteColumns()        ?  'true' :  'false'));  
        $objWriter->writeAttribute('deleteRows',            ($pSheet->getProtection()->getDeleteRows()            ?  'true' :  'false'));  
        $objWriter->writeAttribute('selectLockedCells',    ($pSheet->getProtection()->getSelectLockedCells()    ?  'true' :  'false'));  
        $objWriter->writeAttribute('sort',                    ($pSheet->getProtection()->getSort()                ?  'true' :  'false'));  
        $objWriter->writeAttribute('autoFilter',            ($pSheet->getProtection()->getAutoFilter()            ?  'true' :  'false'));  
        $objWriter->writeAttribute('pivotTables',            ($pSheet->getProtection()->getPivotTables()        ?  'true' :  'false'));  
        $objWriter->writeAttribute('selectUnlockedCells',    ($pSheet->getProtection()->getSelectUnlockedCells()    ?  'true' :  'false'));  
        $objWriter->endElement();  
     * Write ConditionalFormatting  
     * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                    $pSheet            Worksheet  
    private function _writeConditionalFormatting(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        // Loop through styles in the current worksheet  
        foreach ($pSheet->getConditionalStylesCollection() as $cellCoordinate =>  $conditionalStyles) {  
            foreach ($conditionalStyles as $conditional) {  
                // if ($this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode( $conditional->getHashCode() ) == '') {  
                    $objWriter->startElement('conditionalFormatting');  
                    $objWriter->writeAttribute('sqref',    $cellCoordinate);  
                        $objWriter->startElement('cfRule');  
                        $objWriter->writeAttribute('type',        $conditional->getConditionType());  
                        $objWriter->writeAttribute('dxfId',        $this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode( $conditional->getHashCode() ));  
                        $objWriter->writeAttribute('priority',    $id++ );  
                            $objWriter->writeAttribute('operator',    $conditional->getOperatorType());  
                            &&  !is_null($conditional->getText())) { 
                            $objWriter->writeAttribute('text',    $conditional->getText());  
                            &&  !is_null($conditional->getText())) { 
                            $objWriter->writeElement('formula',    'NOT(ISERROR(SEARCH("' .  $conditional->getText() .  '",' .  $cellCoordinate .  ')))');  
                            &&  !is_null($conditional->getText())) { 
                            $objWriter->writeElement('formula',    'LEFT(' .  $cellCoordinate .  ',' .  strlen($conditional->getText()) .  ')="' .  $conditional->getText() .  '"');  
                            &&  !is_null($conditional->getText())) { 
                            $objWriter->writeElement('formula',    'RIGHT(' .  $cellCoordinate .  ',' .  strlen($conditional->getText()) .  ')="' .  $conditional->getText() .  '"');  
                            &&  !is_null($conditional->getText())) { 
                            $objWriter->writeElement('formula',    'ISERROR(SEARCH("' .  $conditional->getText() .  '",' .  $cellCoordinate .  '))');  
                            foreach ($conditional->getConditions() as $formula) {  
                                $objWriter->writeElement('formula',    $formula);  
                        $objWriter->endElement();  
                    $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                    $pSheet            Worksheet  
    private function _writeDataValidations(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        // Datavalidation collection  
        $dataValidationCollection =  $pSheet->getDataValidationCollection();  
        // Write data validations?  
        if (count($dataValidationCollection) >  0) {  
            $objWriter->startElement('dataValidations');  
            $objWriter->writeAttribute('count', count($dataValidationCollection));  
            foreach ($dataValidationCollection as $coordinate =>  $dv) {  
                $objWriter->startElement('dataValidation');  
                if ($dv->getType() !=  '') {  
                    $objWriter->writeAttribute('type', $dv->getType());  
                if ($dv->getErrorStyle() !=  '') {  
                    $objWriter->writeAttribute('errorStyle', $dv->getErrorStyle());  
                if ($dv->getOperator() !=  '') {  
                    $objWriter->writeAttribute('operator', $dv->getOperator());  
                $objWriter->writeAttribute('allowBlank',        ($dv->getAllowBlank()        ?  '1'  :  '0'));  
                $objWriter->writeAttribute('showDropDown',        (!$dv->getShowDropDown()    ?  '1'  :  '0'));  
                $objWriter->writeAttribute('showInputMessage',    ($dv->getShowInputMessage()    ?  '1'  :  '0'));  
                $objWriter->writeAttribute('showErrorMessage',    ($dv->getShowErrorMessage()    ?  '1'  :  '0'));  
                if ($dv->getErrorTitle() !==  '') {  
                    $objWriter->writeAttribute('errorTitle', $dv->getErrorTitle());  
                if ($dv->getError() !==  '') {  
                    $objWriter->writeAttribute('error', $dv->getError());  
                if ($dv->getPromptTitle() !==  '') {  
                    $objWriter->writeAttribute('promptTitle', $dv->getPromptTitle());  
                if ($dv->getPrompt() !==  '') {  
                    $objWriter->writeAttribute('prompt', $dv->getPrompt());  
                $objWriter->writeAttribute('sqref', $coordinate);  
                if ($dv->getFormula1() !==  '') {  
                    $objWriter->writeElement('formula1', $dv->getFormula1());  
                if ($dv->getFormula2() !==  '') {  
                    $objWriter->writeElement('formula2', $dv->getFormula2());  
                $objWriter->endElement();  
            $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                    $pSheet            Worksheet  
    private function _writeHyperlinks(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        $hyperlinkCollection =  $pSheet->getHyperlinkCollection();  
        if (count($hyperlinkCollection) >  0) {  
            $objWriter->startElement('hyperlinks');  
            foreach ($hyperlinkCollection as $coordinate =>  $hyperlink) {  
                $objWriter->startElement('hyperlink');  
                $objWriter->writeAttribute('ref', $coordinate);  
                if (!$hyperlink->isInternal()) {  
                    $objWriter->writeAttribute('r:id',    'rId_hyperlink_' .  $relationId);  
                    $objWriter->writeAttribute('location',    str_replace('sheet://', '', $hyperlink->getUrl()));  
                if ($hyperlink->getTooltip() !=  '') {  
                    $objWriter->writeAttribute('tooltip', $hyperlink->getTooltip());  
                $objWriter->endElement();  
            $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                    $pSheet            Worksheet  
    private function _writeProtectedRanges(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        if (count($pSheet->getProtectedCells()) >  0) {  
            $objWriter->startElement('protectedRanges');  
                foreach ($pSheet->getProtectedCells() as $protectedCell =>  $passwordHash) {  
                    $objWriter->startElement('protectedRange');  
                    $objWriter->writeAttribute('name',        'p' .  md5($protectedCell));  
                    $objWriter->writeAttribute('sqref',    $protectedCell);  
                    $objWriter->writeAttribute('password',    $passwordHash);  
                    $objWriter->endElement();  
            $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                    $pSheet            Worksheet  
    private function _writeMergeCells(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        if (count($pSheet->getMergeCells()) >  0) {  
            $objWriter->startElement('mergeCells');  
                foreach ($pSheet->getMergeCells() as $mergeCell) {  
                    $objWriter->startElement('mergeCell');  
                    $objWriter->writeAttribute('ref', $mergeCell);  
                    $objWriter->endElement();  
            $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                    $pSheet            Worksheet  
    private function _writePrintOptions(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        $objWriter->startElement('printOptions');  
        $objWriter->writeAttribute('gridLines',    ($pSheet->getPrintGridlines() ?  'true':  'false'));  
        $objWriter->writeAttribute('gridLinesSet',    'true');  
        if ($pSheet->getPageSetup()->getHorizontalCentered()) {  
            $objWriter->writeAttribute('horizontalCentered', 'true');  
        if ($pSheet->getPageSetup()->getVerticalCentered()) {  
            $objWriter->writeAttribute('verticalCentered', 'true');  
        $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter                $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                        $pSheet            Worksheet  
    private function _writePageMargins(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        $objWriter->startElement('pageMargins');  
        $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter                $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                        $pSheet            Worksheet  
    private function _writeAutoFilter(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        if ($pSheet->getAutoFilter() !=  '') {  
            $objWriter->startElement('autoFilter');  
            $objWriter->writeAttribute('ref',        $pSheet->getAutoFilter());  
            $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                    $pSheet            Worksheet  
    private function _writePageSetup(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        $objWriter->startElement('pageSetup');  
        $objWriter->writeAttribute('paperSize',        $pSheet->getPageSetup()->getPaperSize());  
        $objWriter->writeAttribute('orientation',    $pSheet->getPageSetup()->getOrientation());  
        if (!is_null($pSheet->getPageSetup()->getScale())) {  
            $objWriter->writeAttribute('scale',                 $pSheet->getPageSetup()->getScale());  
        if (!is_null($pSheet->getPageSetup()->getFitToHeight())) {  
            $objWriter->writeAttribute('fitToHeight',         $pSheet->getPageSetup()->getFitToHeight());  
            $objWriter->writeAttribute('fitToHeight',         '0');  
        if (!is_null($pSheet->getPageSetup()->getFitToWidth())) {  
            $objWriter->writeAttribute('fitToWidth',         $pSheet->getPageSetup()->getFitToWidth());  
            $objWriter->writeAttribute('fitToWidth',         '0');  
        if (!is_null($pSheet->getPageSetup()->getFirstPageNumber())) {  
            $objWriter->writeAttribute('firstPageNumber',    $pSheet->getPageSetup()->getFirstPageNumber());  
            $objWriter->writeAttribute('useFirstPageNumber', '1');  
        $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                $pSheet            Worksheet  
    private function _writeHeaderFooter(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        $objWriter->startElement('headerFooter');  
        $objWriter->writeAttribute('differentOddEven',    ($pSheet->getHeaderFooter()->getDifferentOddEven() ?  'true' :  'false'));  
        $objWriter->writeAttribute('differentFirst',    ($pSheet->getHeaderFooter()->getDifferentFirst() ?  'true' :  'false'));  
        $objWriter->writeAttribute('scaleWithDoc',        ($pSheet->getHeaderFooter()->getScaleWithDocument() ?  'true' :  'false'));  
        $objWriter->writeAttribute('alignWithMargins',    ($pSheet->getHeaderFooter()->getAlignWithMargins() ?  'true' :  'false'));  
            $objWriter->writeElement('oddHeader',        $pSheet->getHeaderFooter()->getOddHeader());  
            $objWriter->writeElement('oddFooter',        $pSheet->getHeaderFooter()->getOddFooter());  
            $objWriter->writeElement('evenHeader',        $pSheet->getHeaderFooter()->getEvenHeader());  
            $objWriter->writeElement('evenFooter',        $pSheet->getHeaderFooter()->getEvenFooter());  
            $objWriter->writeElement('firstHeader',    $pSheet->getHeaderFooter()->getFirstHeader());  
            $objWriter->writeElement('firstFooter',    $pSheet->getHeaderFooter()->getFirstFooter());  
        $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                $pSheet            Worksheet  
    private function _writeBreaks(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        // Get row and column breaks  
        $aColumnBreaks =  array();  
        foreach ($pSheet->getBreaks() as $cell =>  $breakType) {  
                $aColumnBreaks[] =  $cell;  
        if (count($aRowBreaks) >  0) {  
            $objWriter->startElement('rowBreaks');  
            $objWriter->writeAttribute('count',            count($aRowBreaks));  
            $objWriter->writeAttribute('manualBreakCount',    count($aRowBreaks));  
                foreach ($aRowBreaks as $cell) {  
                    $objWriter->startElement('brk');  
                    $objWriter->writeAttribute('id',    $coords[1]);  
                    $objWriter->writeAttribute('man',    '1');  
                    $objWriter->endElement();  
            $objWriter->endElement();  
        // Second, write column breaks  
        if (count($aColumnBreaks) >  0) {  
            $objWriter->startElement('colBreaks');  
            $objWriter->writeAttribute('count',            count($aColumnBreaks));  
            $objWriter->writeAttribute('manualBreakCount',    count($aColumnBreaks));  
                foreach ($aColumnBreaks as $cell) {  
                    $objWriter->startElement('brk');  
                    $objWriter->writeAttribute('man',    '1');  
                    $objWriter->endElement();  
            $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                $pSheet            Worksheet  
     * @param    string[]                        $pStringTable    String table  
    private function _writeSheetData(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null, $pStringTable =  null)  
            // Flipped stringtable, for faster index searching  
            $aFlippedStringTable =  $this->getParentWriter()->getWriterPart('stringtable')->flipStringTable($pStringTable);  
            $objWriter->startElement('sheetData');  
                $highestRow =  $pSheet->getHighestRow();  
                foreach ($pSheet->getCellCollection() as $cellID) {  
                    $cellsByRow[$cellAddress[1]][] =  $cellID;  
                while($currentRow++ <  $highestRow) {  
                    $rowDimension =  $pSheet->getRowDimension($currentRow);  
                    $writeCurrentRow =    isset ($cellsByRow[$currentRow]) ||   
                                        $rowDimension->getRowHeight() >=  0 ||   
                                        $rowDimension->getVisible() ==  false ||   
                                        $rowDimension->getCollapsed() ==  true ||   
                                        $rowDimension->getOutlineLevel() >  0 ||   
                                        $rowDimension->getXfIndex() !==  null;  
                        $objWriter->startElement('row');  
                        $objWriter->writeAttribute('r',    $currentRow);  
                        $objWriter->writeAttribute('spans',    '1:' .  $colCount);  
                        if ($rowDimension->getRowHeight() >=  0) {  
                            $objWriter->writeAttribute('customHeight',    '1');  
                        if ($rowDimension->getVisible() ==  false) {  
                            $objWriter->writeAttribute('hidden',        'true');  
                        if ($rowDimension->getCollapsed() ==  true) {  
                            $objWriter->writeAttribute('collapsed',        'true');  
                        if ($rowDimension->getOutlineLevel() >  0) {  
                            $objWriter->writeAttribute('outlineLevel',    $rowDimension->getOutlineLevel());  
                        if ($rowDimension->getXfIndex() !==  null) {  
                            $objWriter->writeAttribute('s',    $rowDimension->getXfIndex());  
                            $objWriter->writeAttribute('customFormat', '1');  
                        if (isset ($cellsByRow[$currentRow])) {  
                            foreach($cellsByRow[$currentRow] as $cellAddress) {  
                                $this->_writeCell($objWriter, $pSheet, $cellAddress, $pStringTable, $aFlippedStringTable);  
                        $objWriter->endElement();  
            $objWriter->endElement();  
            throw  new Exception("Invalid parameters passed."); 
     * @param    PHPExcel_Shared_XMLWriter    $objWriter                XML Writer  
     * @param    PHPExcel_Worksheet            $pSheet                    Worksheet  
     * @param    PHPExcel_Cell                $pCell                    Cell  
     * @param    string[]                    $pStringTable            String table  
     * @param    string[]                    $pFlippedStringTable    String table (flipped), for faster index searching  
    private function _writeCell(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null, $pCellAddress =  null, $pStringTable =  null, $pFlippedStringTable =  null)  
            $pCell =  $pSheet->getCell($pCellAddress);  
            $objWriter->startElement('c');  
            $objWriter->writeAttribute('r', $pCellAddress);  
            if ($pCell->getXfIndex() !=  '') {  
                $objWriter->writeAttribute('s', $pCell->getXfIndex());  
            // If cell value is supplied, write cell value  
            $cellValue =  $pCell->getValue();  
            if (is_object($cellValue) ||  $cellValue !==  '') {  
                $mappedType =  $pCell->getDataType();  
                // Write data type depending on its type  
                    case 'inlinestr':     // Inline string  
                        $objWriter->writeAttribute('t', $mappedType);  
                            $calculatedValue =  $pCell->getCalculatedValue();  
                            $calculatedValue =  $cellValue;  
                            $objWriter->writeAttribute('t', 'str');  
                        $objWriter->writeAttribute('t', $mappedType);  
                // Write data depending on its type  
                    case 'inlinestr':     // Inline string  
                            $objWriter->startElement('is');  
                            $this->getParentWriter()->getWriterPart('stringtable')->writeRichText($objWriter, $cellValue);  
                            $objWriter->endElement();  
                            if (isset ($pFlippedStringTable[$cellValue])) {  
                                $objWriter->writeElement('v', $pFlippedStringTable[$cellValue]);  
                            $objWriter->writeElement('v', $pFlippedStringTable[$cellValue->getHashCode()]);  
                        $attributes =  $pCell->getFormulaAttributes();  
                        if($attributes['t'] ==  'array') {  
                            $objWriter->startElement('f');  
                            $objWriter->writeAttribute('t', 'array');  
                            $objWriter->writeAttribute('ref', $pCellAddress);  
                            $objWriter->writeAttribute('aca', '1');  
                            $objWriter->writeAttribute('ca', '1');  
                            $objWriter->text(substr($cellValue, 1));  
                            $objWriter->endElement();  
                            $objWriter->writeElement('f', substr($cellValue, 1));  
                                $calculatedValue =  $pCell->getCalculatedValue();  
                                if (!is_array($calculatedValue) &&  substr($calculatedValue, 0, 1) !=  '#') {  
                                    $objWriter->writeElement('v', '0');  
                                $objWriter->writeElement('v', '0');  
                        // force point as decimal separator in case current locale uses comma  
                        $objWriter->writeElement('v', str_replace(',', '.', $cellValue));  
                        $objWriter->writeElement('v', ($cellValue ?  '1' :  '0'));  
                        if (substr($cellValue, 0, 1) ==  '=') {  
                            $objWriter->writeElement('f', substr($cellValue, 1));  
                            $objWriter->writeElement('v', substr($cellValue, 1));  
                            $objWriter->writeElement('v', $cellValue);  
            $objWriter->endElement();  
            throw  new Exception("Invalid parameters passed."); 
     * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                $pSheet            Worksheet  
    private function _writeDrawings(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        // If sheet contains drawings, add the relationships  
        if ($pSheet->getDrawingCollection()->count() >  0) {  
            $objWriter->startElement('drawing');  
            $objWriter->writeAttribute('r:id', 'rId1');  
            $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                $pSheet            Worksheet  
    private function _writeLegacyDrawing(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        // If sheet contains comments, add the relationships  
        if (count($pSheet->getComments()) >  0) {  
            $objWriter->startElement('legacyDrawing');  
            $objWriter->writeAttribute('r:id', 'rId_comments_vml1');  
            $objWriter->endElement();  
     * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer  
     * @param    PHPExcel_Worksheet                $pSheet            Worksheet  
    private function _writeLegacyDrawingHF(PHPExcel_Shared_XMLWriter $objWriter =  null, PHPExcel_Worksheet $pSheet =  null)  
        // If sheet contains comments, add the relationships  
        if (count($pSheet->getHeaderFooter()->getImages()) >  0) {  
            $objWriter->startElement('legacyDrawingHF');  
            $objWriter->writeAttribute('r:id', 'rId_headerfooter_vml1');  
            $objWriter->endElement();  
 
 
        
       |