PHPExcel_Writer_Excel2007
[ class tree: PHPExcel_Writer_Excel2007 ] [ index: PHPExcel_Writer_Excel2007 ] [ all elements ]

Source for file Worksheet.php

Documentation is available at Worksheet.php

  1. <?php
  2. /**
  3.  * PHPExcel
  4.  *
  5.  * Copyright (c) 2006 - 2011 PHPExcel
  6.  *
  7.  * This library is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU Lesser General Public
  9.  * License as published by the Free Software Foundation; either
  10.  * version 2.1 of the License, or (at your option) any later version.
  11.  *
  12.  * This library is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * Lesser General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU Lesser General Public
  18.  * License along with this library; if not, write to the Free Software
  19.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  20.  *
  21.  * @category   PHPExcel
  22.  * @package    PHPExcel_Writer_Excel2007
  23.  * @copyright  Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
  24.  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
  25.  * @version    1.7.6, 2011-02-27
  26.  */
  27.  
  28.  
  29. /**
  30.  * PHPExcel_Writer_Excel2007_Worksheet
  31.  *
  32.  * @category   PHPExcel
  33.  * @package    PHPExcel_Writer_Excel2007
  34.  * @copyright  Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
  35.  */
  36. {
  37.     /**
  38.      * Write worksheet to XML format
  39.      *
  40.      * @param    PHPExcel_Worksheet        $pSheet 
  41.      * @param    string[]                $pStringTable 
  42.      * @return    string                    XML Output
  43.      * @throws    Exception
  44.      */
  45.     public function writeWorksheet($pSheet = null, $pStringTable = null)
  46.     {
  47.         if (!is_null($pSheet)) {
  48.             // Create XML writer
  49.             $objWriter = null;
  50.             if ($this->getParentWriter()->getUseDiskCaching()) {
  51.                 $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
  52.             } else {
  53.                 $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
  54.             }
  55.  
  56.             // XML header
  57.             $objWriter->startDocument('1.0','UTF-8','yes');
  58.  
  59.             // Worksheet
  60.             $objWriter->startElement('worksheet');
  61.             $objWriter->writeAttribute('xml:space', 'preserve');
  62.             $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main');
  63.             $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
  64.  
  65.                 // sheetPr
  66.                 $this->_writeSheetPr($objWriter, $pSheet);
  67.  
  68.                 // Dimension
  69.                 $this->_writeDimension($objWriter, $pSheet);
  70.  
  71.                 // sheetViews
  72.                 $this->_writeSheetViews($objWriter, $pSheet);
  73.  
  74.                 // sheetFormatPr
  75.                 $this->_writeSheetFormatPr($objWriter, $pSheet);
  76.  
  77.                 // cols
  78.                 $this->_writeCols($objWriter, $pSheet);
  79.  
  80.                 // sheetData
  81.                 $this->_writeSheetData($objWriter, $pSheet, $pStringTable);
  82.  
  83.                 // sheetProtection
  84.                 $this->_writeSheetProtection($objWriter, $pSheet);
  85.  
  86.                 // protectedRanges
  87.                 $this->_writeProtectedRanges($objWriter, $pSheet);
  88.  
  89.                 // autoFilter
  90.                 $this->_writeAutoFilter($objWriter, $pSheet);
  91.  
  92.                 // mergeCells
  93.                 $this->_writeMergeCells($objWriter, $pSheet);
  94.  
  95.                 // conditionalFormatting
  96.                 $this->_writeConditionalFormatting($objWriter, $pSheet);
  97.  
  98.                 // dataValidations
  99.                 $this->_writeDataValidations($objWriter, $pSheet);
  100.  
  101.                 // hyperlinks
  102.                 $this->_writeHyperlinks($objWriter, $pSheet);
  103.  
  104.                 // Print options
  105.                 $this->_writePrintOptions($objWriter, $pSheet);
  106.  
  107.                 // Page margins
  108.                 $this->_writePageMargins($objWriter, $pSheet);
  109.  
  110.                 // Page setup
  111.                 $this->_writePageSetup($objWriter, $pSheet);
  112.  
  113.                 // Header / footer
  114.                 $this->_writeHeaderFooter($objWriter, $pSheet);
  115.  
  116.                 // Breaks
  117.                 $this->_writeBreaks($objWriter, $pSheet);
  118.  
  119.                 // Drawings
  120.                 $this->_writeDrawings($objWriter, $pSheet);
  121.  
  122.                 // LegacyDrawing
  123.                 $this->_writeLegacyDrawing($objWriter, $pSheet);
  124.  
  125.                 // LegacyDrawingHF
  126.                 $this->_writeLegacyDrawingHF($objWriter, $pSheet);
  127.  
  128.             $objWriter->endElement();
  129.  
  130.             // Return
  131.             return $objWriter->getData();
  132.         } else {
  133.             throw new Exception("Invalid PHPExcel_Worksheet object passed.");
  134.         }
  135.     }
  136.  
  137.     /**
  138.      * Write SheetPr
  139.      *
  140.      * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer
  141.      * @param    PHPExcel_Worksheet                $pSheet            Worksheet
  142.      * @throws    Exception
  143.      */
  144.     private function _writeSheetPr(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  145.     {
  146.         // sheetPr
  147.         $objWriter->startElement('sheetPr');
  148.         //$objWriter->writeAttribute('codeName',        $pSheet->getTitle());
  149.  
  150.             // tabColor
  151.             if ($pSheet->isTabColorSet()) {
  152.                 $objWriter->startElement('tabColor');
  153.                 $objWriter->writeAttribute('rgb',    $pSheet->getTabColor()->getARGB());
  154.                 $objWriter->endElement();
  155.             }
  156.  
  157.             // outlinePr
  158.             $objWriter->startElement('outlinePr');
  159.             $objWriter->writeAttribute('summaryBelow',    ($pSheet->getShowSummaryBelow() ? '1' : '0'));
  160.             $objWriter->writeAttribute('summaryRight',    ($pSheet->getShowSummaryRight() ? '1' : '0'));
  161.             $objWriter->endElement();
  162.  
  163.             // pageSetUpPr
  164.             if ($pSheet->getPageSetup()->getFitToPage()) {
  165.                 $objWriter->startElement('pageSetUpPr');
  166.                 $objWriter->writeAttribute('fitToPage',    '1');
  167.                 $objWriter->endElement();
  168.             }
  169.  
  170.         $objWriter->endElement();
  171.     }
  172.  
  173.     /**
  174.      * Write Dimension
  175.      *
  176.      * @param    PHPExcel_Shared_XMLWriter    $objWriter        XML Writer
  177.      * @param    PHPExcel_Worksheet            $pSheet            Worksheet
  178.      * @throws    Exception
  179.      */
  180.     private function _writeDimension(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  181.     {
  182.         // dimension
  183.         $objWriter->startElement('dimension');
  184.         $objWriter->writeAttribute('ref', $pSheet->calculateWorksheetDimension());
  185.         $objWriter->endElement();
  186.     }
  187.  
  188.     /**
  189.      * Write SheetViews
  190.      *
  191.      * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer
  192.      * @param    PHPExcel_Worksheet                    $pSheet            Worksheet
  193.      * @throws    Exception
  194.      */
  195.     private function _writeSheetViews(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  196.     {
  197.         // sheetViews
  198.         $objWriter->startElement('sheetViews');
  199.  
  200.             // Sheet selected?
  201.             $sheetSelected = false;
  202.             if ($this->getParentWriter()->getPHPExcel()->getIndex($pSheet) == $this->getParentWriter()->getPHPExcel()->getActiveSheetIndex())
  203.                 $sheetSelected = true;
  204.  
  205.  
  206.             // sheetView
  207.             $objWriter->startElement('sheetView');
  208.             $objWriter->writeAttribute('tabSelected',        $sheetSelected ? '1' : '0');
  209.             $objWriter->writeAttribute('workbookViewId',    '0');
  210.  
  211.                 // Zoom scales
  212.                 if ($pSheet->getSheetView()->getZoomScale() != 100) {
  213.                     $objWriter->writeAttribute('zoomScale',    $pSheet->getSheetView()->getZoomScale());
  214.                 }
  215.                 if ($pSheet->getSheetView()->getZoomScaleNormal() != 100) {
  216.                     $objWriter->writeAttribute('zoomScaleNormal',    $pSheet->getSheetView()->getZoomScaleNormal());
  217.                 }
  218.  
  219.                 // Gridlines
  220.                 if ($pSheet->getShowGridlines()) {
  221.                     $objWriter->writeAttribute('showGridLines',    'true');
  222.                 } else {
  223.                     $objWriter->writeAttribute('showGridLines',    'false');
  224.                 }
  225.  
  226.                 // Row and column headers
  227.                 if ($pSheet->getShowRowColHeaders()) {
  228.                     $objWriter->writeAttribute('showRowColHeaders', '1');
  229.                 } else {
  230.                     $objWriter->writeAttribute('showRowColHeaders', '0');
  231.                 }
  232.  
  233.                 // Right-to-left
  234.                 if ($pSheet->getRightToLeft()) {
  235.                     $objWriter->writeAttribute('rightToLeft',    'true');
  236.                 }
  237.  
  238.                 $activeCell = $pSheet->getActiveCell();
  239.  
  240.                 // Pane
  241.                 $pane = '';
  242.                 $topLeftCell = $pSheet->getFreezePane();
  243.                 if (($topLeftCell != '') && ($topLeftCell != 'A1')) {
  244.                     $activeCell = $topLeftCell;
  245.                     // Calculate freeze coordinates
  246.                     $xSplit = $ySplit = 0;
  247.  
  248.                     list($xSplit, $ySplit) = PHPExcel_Cell::coordinateFromString($topLeftCell);
  249.                     $xSplit = PHPExcel_Cell::columnIndexFromString($xSplit);
  250.  
  251.                     // pane
  252.                     $pane = 'topRight';
  253.                     $objWriter->startElement('pane');
  254.                     if ($xSplit > 1)
  255.                         $objWriter->writeAttribute('xSplit',    $xSplit - 1);
  256.                     if ($ySplit > 1) {
  257.                         $objWriter->writeAttribute('ySplit',    $ySplit - 1);
  258.                         $pane = ($xSplit > 1) ? 'bottomRight' : 'bottomLeft';
  259.                     }
  260.                     $objWriter->writeAttribute('topLeftCell',    $topLeftCell);
  261.                     $objWriter->writeAttribute('activePane',    $pane);
  262.                     $objWriter->writeAttribute('state',        'frozen');
  263.                     $objWriter->endElement();
  264.  
  265.                     if (($xSplit > 1) && ($ySplit > 1)) {
  266.                         //    Write additional selections if more than two panes (ie both an X and a Y split)
  267.                         $objWriter->startElement('selection');    $objWriter->writeAttribute('pane', 'topRight');        $objWriter->endElement();
  268.                         $objWriter->startElement('selection');    $objWriter->writeAttribute('pane', 'bottomLeft');    $objWriter->endElement();
  269.                     }
  270.                 }
  271.  
  272.                 // Selection
  273.                 if ($pane != '') {
  274.                     //    Only need to write selection element if we have a split pane
  275.                     //        We cheat a little by over-riding the active cell selection, setting it to the split cell
  276.                     $objWriter->startElement('selection');
  277.                     $objWriter->writeAttribute('pane', $pane);
  278.                     $objWriter->writeAttribute('activeCell', $activeCell);
  279.                     $objWriter->writeAttribute('sqref', $activeCell);
  280.                     $objWriter->endElement();
  281.                 }
  282.  
  283.             $objWriter->endElement();
  284.  
  285.         $objWriter->endElement();
  286.     }
  287.  
  288.     /**
  289.      * Write SheetFormatPr
  290.      *
  291.      * @param    PHPExcel_Shared_XMLWriter $objWriter        XML Writer
  292.      * @param    PHPExcel_Worksheet          $pSheet            Worksheet
  293.      * @throws    Exception
  294.      */
  295.     private function _writeSheetFormatPr(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  296.     {
  297.         // sheetFormatPr
  298.         $objWriter->startElement('sheetFormatPr');
  299.  
  300.             // Default row height
  301.             if ($pSheet->getDefaultRowDimension()->getRowHeight() >= 0) {
  302.                 $objWriter->writeAttribute('customHeight',        'true');
  303.                 $objWriter->writeAttribute('defaultRowHeight',    PHPExcel_Shared_String::FormatNumber($pSheet->getDefaultRowDimension()->getRowHeight()));
  304.             } else {
  305.                 $objWriter->writeAttribute('defaultRowHeight', '12.75');
  306.             }
  307.  
  308.             // Default column width
  309.             if ($pSheet->getDefaultColumnDimension()->getWidth() >= 0) {
  310.                 $objWriter->writeAttribute('defaultColWidth', PHPExcel_Shared_String::FormatNumber($pSheet->getDefaultColumnDimension()->getWidth()));
  311.             }
  312.  
  313.             // Outline level - row
  314.             $outlineLevelRow = 0;
  315.             foreach ($pSheet->getRowDimensions() as $dimension) {
  316.                 if ($dimension->getOutlineLevel() > $outlineLevelRow) {
  317.                     $outlineLevelRow = $dimension->getOutlineLevel();
  318.                 }
  319.             }
  320.             $objWriter->writeAttribute('outlineLevelRow',    (int)$outlineLevelRow);
  321.  
  322.             // Outline level - column
  323.             $outlineLevelCol = 0;
  324.             foreach ($pSheet->getColumnDimensions() as $dimension) {
  325.                 if ($dimension->getOutlineLevel() > $outlineLevelCol) {
  326.                     $outlineLevelCol = $dimension->getOutlineLevel();
  327.                 }
  328.             }
  329.             $objWriter->writeAttribute('outlineLevelCol',    (int)$outlineLevelCol);
  330.  
  331.         $objWriter->endElement();
  332.     }
  333.  
  334.     /**
  335.      * Write Cols
  336.      *
  337.      * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer
  338.      * @param    PHPExcel_Worksheet                    $pSheet            Worksheet
  339.      * @throws    Exception
  340.      */
  341.     private function _writeCols(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  342.     {
  343.         // cols
  344.         if (count($pSheet->getColumnDimensions()) > 0)  {
  345.             $objWriter->startElement('cols');
  346.  
  347.                 $pSheet->calculateColumnWidths();
  348.  
  349.                 // Loop through column dimensions
  350.                 foreach ($pSheet->getColumnDimensions() as $colDimension) {
  351.                     // col
  352.                     $objWriter->startElement('col');
  353.                     $objWriter->writeAttribute('min',    PHPExcel_Cell::columnIndexFromString($colDimension->getColumnIndex()));
  354.                     $objWriter->writeAttribute('max',    PHPExcel_Cell::columnIndexFromString($colDimension->getColumnIndex()));
  355.  
  356.                     if ($colDimension->getWidth() < 0) {
  357.                         // No width set, apply default of 10
  358.                         $objWriter->writeAttribute('width',        '9.10');
  359.                     } else {
  360.                         // Width set
  361.                         $objWriter->writeAttribute('width',        PHPExcel_Shared_String::FormatNumber($colDimension->getWidth()));
  362.                     }
  363.  
  364.                     // Column visibility
  365.                     if ($colDimension->getVisible() == false) {
  366.                         $objWriter->writeAttribute('hidden',        'true');
  367.                     }
  368.  
  369.                     // Auto size?
  370.                     if ($colDimension->getAutoSize()) {
  371.                         $objWriter->writeAttribute('bestFit',        'true');
  372.                     }
  373.  
  374.                     // Custom width?
  375.                     if ($colDimension->getWidth() != $pSheet->getDefaultColumnDimension()->getWidth()) {
  376.                         $objWriter->writeAttribute('customWidth',    'true');
  377.                     }
  378.  
  379.                     // Collapsed
  380.                     if ($colDimension->getCollapsed() == true) {
  381.                         $objWriter->writeAttribute('collapsed',        'true');
  382.                     }
  383.  
  384.                     // Outline level
  385.                     if ($colDimension->getOutlineLevel() > 0) {
  386.                         $objWriter->writeAttribute('outlineLevel',    $colDimension->getOutlineLevel());
  387.                     }
  388.  
  389.                     // Style
  390.                     $objWriter->writeAttribute('style', $colDimension->getXfIndex());
  391.  
  392.                     $objWriter->endElement();
  393.                 }
  394.  
  395.             $objWriter->endElement();
  396.         }
  397.     }
  398.  
  399.     /**
  400.      * Write SheetProtection
  401.      *
  402.      * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer
  403.      * @param    PHPExcel_Worksheet                    $pSheet            Worksheet
  404.      * @throws    Exception
  405.      */
  406.     private function _writeSheetProtection(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  407.     {
  408.         // sheetProtection
  409.         $objWriter->startElement('sheetProtection');
  410.  
  411.         if ($pSheet->getProtection()->getPassword() != '') {
  412.             $objWriter->writeAttribute('password',                $pSheet->getProtection()->getPassword());
  413.         }
  414.  
  415.         $objWriter->writeAttribute('sheet',                ($pSheet->getProtection()->getSheet()                ? 'true' : 'false'));
  416.         $objWriter->writeAttribute('objects',                ($pSheet->getProtection()->getObjects()            ? 'true' : 'false'));
  417.         $objWriter->writeAttribute('scenarios',            ($pSheet->getProtection()->getScenarios()            ? 'true' : 'false'));
  418.         $objWriter->writeAttribute('formatCells',            ($pSheet->getProtection()->getFormatCells()        ? 'true' : 'false'));
  419.         $objWriter->writeAttribute('formatColumns',        ($pSheet->getProtection()->getFormatColumns()        ? 'true' : 'false'));
  420.         $objWriter->writeAttribute('formatRows',            ($pSheet->getProtection()->getFormatRows()            ? 'true' : 'false'));
  421.         $objWriter->writeAttribute('insertColumns',        ($pSheet->getProtection()->getInsertColumns()        ? 'true' : 'false'));
  422.         $objWriter->writeAttribute('insertRows',            ($pSheet->getProtection()->getInsertRows()            ? 'true' : 'false'));
  423.         $objWriter->writeAttribute('insertHyperlinks',        ($pSheet->getProtection()->getInsertHyperlinks()    ? 'true' : 'false'));
  424.         $objWriter->writeAttribute('deleteColumns',        ($pSheet->getProtection()->getDeleteColumns()        ? 'true' : 'false'));
  425.         $objWriter->writeAttribute('deleteRows',            ($pSheet->getProtection()->getDeleteRows()            ? 'true' : 'false'));
  426.         $objWriter->writeAttribute('selectLockedCells',    ($pSheet->getProtection()->getSelectLockedCells()    ? 'true' : 'false'));
  427.         $objWriter->writeAttribute('sort',                    ($pSheet->getProtection()->getSort()                ? 'true' : 'false'));
  428.         $objWriter->writeAttribute('autoFilter',            ($pSheet->getProtection()->getAutoFilter()            ? 'true' : 'false'));
  429.         $objWriter->writeAttribute('pivotTables',            ($pSheet->getProtection()->getPivotTables()        ? 'true' : 'false'));
  430.         $objWriter->writeAttribute('selectUnlockedCells',    ($pSheet->getProtection()->getSelectUnlockedCells()    ? 'true' : 'false'));
  431.         $objWriter->endElement();
  432.     }
  433.  
  434.     /**
  435.      * Write ConditionalFormatting
  436.      *
  437.      * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer
  438.      * @param    PHPExcel_Worksheet                    $pSheet            Worksheet
  439.      * @throws    Exception
  440.      */
  441.     private function _writeConditionalFormatting(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  442.     {
  443.         // Conditional id
  444.         $id = 1;
  445.  
  446.         // Loop through styles in the current worksheet
  447.         foreach ($pSheet->getConditionalStylesCollection() as $cellCoordinate => $conditionalStyles) {
  448.             foreach ($conditionalStyles as $conditional) {
  449.                 // WHY was this again?
  450.                 // if ($this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode( $conditional->getHashCode() ) == '') {
  451.                 //    continue;
  452.                 // }
  453.  
  454.                 if ($conditional->getConditionType() != PHPExcel_Style_Conditional::CONDITION_NONE) {
  455.                     // conditionalFormatting
  456.                     $objWriter->startElement('conditionalFormatting');
  457.                     $objWriter->writeAttribute('sqref',    $cellCoordinate);
  458.  
  459.                         // cfRule
  460.                         $objWriter->startElement('cfRule');
  461.                         $objWriter->writeAttribute('type',        $conditional->getConditionType());
  462.                         $objWriter->writeAttribute('dxfId',        $this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode( $conditional->getHashCode() ));
  463.                         $objWriter->writeAttribute('priority',    $id++);
  464.  
  465.                         if (($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CELLIS
  466.                                 ||
  467.                              $conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT)
  468.                             && $conditional->getOperatorType() != PHPExcel_Style_Conditional::OPERATOR_NONE) {
  469.                             $objWriter->writeAttribute('operator',    $conditional->getOperatorType());
  470.                         }
  471.  
  472.                         if ($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT
  473.                             && !is_null($conditional->getText())) {
  474.                             $objWriter->writeAttribute('text',    $conditional->getText());
  475.                         }
  476.  
  477.                         if ($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT
  478.                             && $conditional->getOperatorType() == PHPExcel_Style_Conditional::OPERATOR_CONTAINSTEXT
  479.                             && !is_null($conditional->getText())) {
  480.                             $objWriter->writeElement('formula',    'NOT(ISERROR(SEARCH("' . $conditional->getText() . '",' . $cellCoordinate . ')))');
  481.                         } else if ($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT
  482.                             && $conditional->getOperatorType() == PHPExcel_Style_Conditional::OPERATOR_BEGINSWITH
  483.                             && !is_null($conditional->getText())) {
  484.                             $objWriter->writeElement('formula',    'LEFT(' . $cellCoordinate . ',' . strlen($conditional->getText()) . ')="' . $conditional->getText() . '"');
  485.                         } else if ($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT
  486.                             && $conditional->getOperatorType() == PHPExcel_Style_Conditional::OPERATOR_ENDSWITH
  487.                             && !is_null($conditional->getText())) {
  488.                             $objWriter->writeElement('formula',    'RIGHT(' . $cellCoordinate . ',' . strlen($conditional->getText()) . ')="' . $conditional->getText() . '"');
  489.                         } else if ($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT
  490.                             && $conditional->getOperatorType() == PHPExcel_Style_Conditional::OPERATOR_NOTCONTAINS
  491.                             && !is_null($conditional->getText())) {
  492.                             $objWriter->writeElement('formula',    'ISERROR(SEARCH("' . $conditional->getText() . '",' . $cellCoordinate . '))');
  493.                         } else if ($conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CELLIS
  494.                             || $conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_CONTAINSTEXT
  495.                             || $conditional->getConditionType() == PHPExcel_Style_Conditional::CONDITION_EXPRESSION) {
  496.                             foreach ($conditional->getConditions() as $formula) {
  497.                                 // Formula
  498.                                 $objWriter->writeElement('formula',    $formula);
  499.                             }
  500.                         }
  501.  
  502.                         $objWriter->endElement();
  503.  
  504.                     $objWriter->endElement();
  505.                 }
  506.             }
  507.         }
  508.     }
  509.  
  510.     /**
  511.      * Write DataValidations
  512.      *
  513.      * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer
  514.      * @param    PHPExcel_Worksheet                    $pSheet            Worksheet
  515.      * @throws    Exception
  516.      */
  517.     private function _writeDataValidations(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  518.     {
  519.         // Datavalidation collection
  520.         $dataValidationCollection = $pSheet->getDataValidationCollection();
  521.  
  522.         // Write data validations?
  523.         if (count($dataValidationCollection) > 0) {
  524.             $objWriter->startElement('dataValidations');
  525.             $objWriter->writeAttribute('count', count($dataValidationCollection));
  526.  
  527.             foreach ($dataValidationCollection as $coordinate => $dv) {
  528.                 $objWriter->startElement('dataValidation');
  529.  
  530.                 if ($dv->getType() != '') {
  531.                     $objWriter->writeAttribute('type', $dv->getType());
  532.                 }
  533.  
  534.                 if ($dv->getErrorStyle() != '') {
  535.                     $objWriter->writeAttribute('errorStyle', $dv->getErrorStyle());
  536.                 }
  537.  
  538.                 if ($dv->getOperator() != '') {
  539.                     $objWriter->writeAttribute('operator', $dv->getOperator());
  540.                 }
  541.  
  542.                 $objWriter->writeAttribute('allowBlank',        ($dv->getAllowBlank()        ? '1'  : '0'));
  543.                 $objWriter->writeAttribute('showDropDown',        (!$dv->getShowDropDown()    ? '1'  : '0'));
  544.                 $objWriter->writeAttribute('showInputMessage',    ($dv->getShowInputMessage()    ? '1'  : '0'));
  545.                 $objWriter->writeAttribute('showErrorMessage',    ($dv->getShowErrorMessage()    ? '1'  : '0'));
  546.  
  547.                 if ($dv->getErrorTitle() !== '') {
  548.                     $objWriter->writeAttribute('errorTitle', $dv->getErrorTitle());
  549.                 }
  550.                 if ($dv->getError() !== '') {
  551.                     $objWriter->writeAttribute('error', $dv->getError());
  552.                 }
  553.                 if ($dv->getPromptTitle() !== '') {
  554.                     $objWriter->writeAttribute('promptTitle', $dv->getPromptTitle());
  555.                 }
  556.                 if ($dv->getPrompt() !== '') {
  557.                     $objWriter->writeAttribute('prompt', $dv->getPrompt());
  558.                 }
  559.  
  560.                 $objWriter->writeAttribute('sqref', $coordinate);
  561.  
  562.                 if ($dv->getFormula1() !== '') {
  563.                     $objWriter->writeElement('formula1', $dv->getFormula1());
  564.                 }
  565.                 if ($dv->getFormula2() !== '') {
  566.                     $objWriter->writeElement('formula2', $dv->getFormula2());
  567.                 }
  568.  
  569.                 $objWriter->endElement();
  570.             }
  571.  
  572.             $objWriter->endElement();
  573.         }
  574.     }
  575.  
  576.     /**
  577.      * Write Hyperlinks
  578.      *
  579.      * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer
  580.      * @param    PHPExcel_Worksheet                    $pSheet            Worksheet
  581.      * @throws    Exception
  582.      */
  583.     private function _writeHyperlinks(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  584.     {
  585.         // Hyperlink collection
  586.         $hyperlinkCollection = $pSheet->getHyperlinkCollection();
  587.  
  588.         // Relation ID
  589.         $relationId = 1;
  590.  
  591.         // Write hyperlinks?
  592.         if (count($hyperlinkCollection) > 0) {
  593.             $objWriter->startElement('hyperlinks');
  594.  
  595.             foreach ($hyperlinkCollection as $coordinate => $hyperlink) {
  596.                 $objWriter->startElement('hyperlink');
  597.  
  598.                 $objWriter->writeAttribute('ref', $coordinate);
  599.                 if (!$hyperlink->isInternal()) {
  600.                     $objWriter->writeAttribute('r:id',    'rId_hyperlink_' . $relationId);
  601.                     ++$relationId;
  602.                 } else {
  603.                     $objWriter->writeAttribute('location',    str_replace('sheet://', '', $hyperlink->getUrl()));
  604.                 }
  605.  
  606.                 if ($hyperlink->getTooltip() != '') {
  607.                     $objWriter->writeAttribute('tooltip', $hyperlink->getTooltip());
  608.                 }
  609.  
  610.                 $objWriter->endElement();
  611.             }
  612.  
  613.             $objWriter->endElement();
  614.         }
  615.     }
  616.  
  617.     /**
  618.      * Write ProtectedRanges
  619.      *
  620.      * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer
  621.      * @param    PHPExcel_Worksheet                    $pSheet            Worksheet
  622.      * @throws    Exception
  623.      */
  624.     private function _writeProtectedRanges(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  625.     {
  626.         if (count($pSheet->getProtectedCells()) > 0) {
  627.             // protectedRanges
  628.             $objWriter->startElement('protectedRanges');
  629.  
  630.                 // Loop protectedRanges
  631.                 foreach ($pSheet->getProtectedCells() as $protectedCell => $passwordHash) {
  632.                     // protectedRange
  633.                     $objWriter->startElement('protectedRange');
  634.                     $objWriter->writeAttribute('name',        'p' . md5($protectedCell));
  635.                     $objWriter->writeAttribute('sqref',    $protectedCell);
  636.                     $objWriter->writeAttribute('password',    $passwordHash);
  637.                     $objWriter->endElement();
  638.                 }
  639.  
  640.             $objWriter->endElement();
  641.         }
  642.     }
  643.  
  644.     /**
  645.      * Write MergeCells
  646.      *
  647.      * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer
  648.      * @param    PHPExcel_Worksheet                    $pSheet            Worksheet
  649.      * @throws    Exception
  650.      */
  651.     private function _writeMergeCells(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  652.     {
  653.         if (count($pSheet->getMergeCells()) > 0) {
  654.             // mergeCells
  655.             $objWriter->startElement('mergeCells');
  656.  
  657.                 // Loop mergeCells
  658.                 foreach ($pSheet->getMergeCells() as $mergeCell) {
  659.                     // mergeCell
  660.                     $objWriter->startElement('mergeCell');
  661.                     $objWriter->writeAttribute('ref', $mergeCell);
  662.                     $objWriter->endElement();
  663.                 }
  664.  
  665.             $objWriter->endElement();
  666.         }
  667.     }
  668.  
  669.     /**
  670.      * Write PrintOptions
  671.      *
  672.      * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer
  673.      * @param    PHPExcel_Worksheet                    $pSheet            Worksheet
  674.      * @throws    Exception
  675.      */
  676.     private function _writePrintOptions(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  677.     {
  678.         // printOptions
  679.         $objWriter->startElement('printOptions');
  680.  
  681.         $objWriter->writeAttribute('gridLines',    ($pSheet->getPrintGridlines() ? 'true': 'false'));
  682.         $objWriter->writeAttribute('gridLinesSet',    'true');
  683.  
  684.         if ($pSheet->getPageSetup()->getHorizontalCentered()) {
  685.             $objWriter->writeAttribute('horizontalCentered', 'true');
  686.         }
  687.  
  688.         if ($pSheet->getPageSetup()->getVerticalCentered()) {
  689.             $objWriter->writeAttribute('verticalCentered', 'true');
  690.         }
  691.  
  692.         $objWriter->endElement();
  693.     }
  694.  
  695.     /**
  696.      * Write PageMargins
  697.      *
  698.      * @param    PHPExcel_Shared_XMLWriter                $objWriter        XML Writer
  699.      * @param    PHPExcel_Worksheet                        $pSheet            Worksheet
  700.      * @throws    Exception
  701.      */
  702.     private function _writePageMargins(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  703.     {
  704.         // pageMargins
  705.         $objWriter->startElement('pageMargins');
  706.         $objWriter->writeAttribute('left',        PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getLeft()));
  707.         $objWriter->writeAttribute('right',        PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getRight()));
  708.         $objWriter->writeAttribute('top',        PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getTop()));
  709.         $objWriter->writeAttribute('bottom',    PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getBottom()));
  710.         $objWriter->writeAttribute('header',    PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getHeader()));
  711.         $objWriter->writeAttribute('footer',    PHPExcel_Shared_String::FormatNumber($pSheet->getPageMargins()->getFooter()));
  712.         $objWriter->endElement();
  713.     }
  714.  
  715.     /**
  716.      * Write AutoFilter
  717.      *
  718.      * @param    PHPExcel_Shared_XMLWriter                $objWriter        XML Writer
  719.      * @param    PHPExcel_Worksheet                        $pSheet            Worksheet
  720.      * @throws    Exception
  721.      */
  722.     private function _writeAutoFilter(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  723.     {
  724.         if ($pSheet->getAutoFilter() != '') {
  725.             // autoFilter
  726.             $objWriter->startElement('autoFilter');
  727.             $objWriter->writeAttribute('ref',        $pSheet->getAutoFilter());
  728.             $objWriter->endElement();
  729.         }
  730.     }
  731.  
  732.     /**
  733.      * Write PageSetup
  734.      *
  735.      * @param    PHPExcel_Shared_XMLWriter            $objWriter        XML Writer
  736.      * @param    PHPExcel_Worksheet                    $pSheet            Worksheet
  737.      * @throws    Exception
  738.      */
  739.     private function _writePageSetup(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  740.     {
  741.         // pageSetup
  742.         $objWriter->startElement('pageSetup');
  743.         $objWriter->writeAttribute('paperSize',        $pSheet->getPageSetup()->getPaperSize());
  744.         $objWriter->writeAttribute('orientation',    $pSheet->getPageSetup()->getOrientation());
  745.  
  746.         if (!is_null($pSheet->getPageSetup()->getScale())) {
  747.             $objWriter->writeAttribute('scale',                 $pSheet->getPageSetup()->getScale());
  748.         }
  749.         if (!is_null($pSheet->getPageSetup()->getFitToHeight())) {
  750.             $objWriter->writeAttribute('fitToHeight',         $pSheet->getPageSetup()->getFitToHeight());
  751.         } else {
  752.             $objWriter->writeAttribute('fitToHeight',         '0');
  753.         }
  754.         if (!is_null($pSheet->getPageSetup()->getFitToWidth())) {
  755.             $objWriter->writeAttribute('fitToWidth',         $pSheet->getPageSetup()->getFitToWidth());
  756.         } else {
  757.             $objWriter->writeAttribute('fitToWidth',         '0');
  758.         }
  759.         if (!is_null($pSheet->getPageSetup()->getFirstPageNumber())) {
  760.             $objWriter->writeAttribute('firstPageNumber',    $pSheet->getPageSetup()->getFirstPageNumber());
  761.             $objWriter->writeAttribute('useFirstPageNumber', '1');
  762.         }
  763.  
  764.         $objWriter->endElement();
  765.     }
  766.  
  767.     /**
  768.      * Write Header / Footer
  769.      *
  770.      * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer
  771.      * @param    PHPExcel_Worksheet                $pSheet            Worksheet
  772.      * @throws    Exception
  773.      */
  774.     private function _writeHeaderFooter(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  775.     {
  776.         // headerFooter
  777.         $objWriter->startElement('headerFooter');
  778.         $objWriter->writeAttribute('differentOddEven',    ($pSheet->getHeaderFooter()->getDifferentOddEven() ? 'true' : 'false'));
  779.         $objWriter->writeAttribute('differentFirst',    ($pSheet->getHeaderFooter()->getDifferentFirst() ? 'true' : 'false'));
  780.         $objWriter->writeAttribute('scaleWithDoc',        ($pSheet->getHeaderFooter()->getScaleWithDocument() ? 'true' : 'false'));
  781.         $objWriter->writeAttribute('alignWithMargins',    ($pSheet->getHeaderFooter()->getAlignWithMargins() ? 'true' : 'false'));
  782.  
  783.             $objWriter->writeElement('oddHeader',        $pSheet->getHeaderFooter()->getOddHeader());
  784.             $objWriter->writeElement('oddFooter',        $pSheet->getHeaderFooter()->getOddFooter());
  785.             $objWriter->writeElement('evenHeader',        $pSheet->getHeaderFooter()->getEvenHeader());
  786.             $objWriter->writeElement('evenFooter',        $pSheet->getHeaderFooter()->getEvenFooter());
  787.             $objWriter->writeElement('firstHeader',    $pSheet->getHeaderFooter()->getFirstHeader());
  788.             $objWriter->writeElement('firstFooter',    $pSheet->getHeaderFooter()->getFirstFooter());
  789.         $objWriter->endElement();
  790.     }
  791.  
  792.     /**
  793.      * Write Breaks
  794.      *
  795.      * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer
  796.      * @param    PHPExcel_Worksheet                $pSheet            Worksheet
  797.      * @throws    Exception
  798.      */
  799.     private function _writeBreaks(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  800.     {
  801.         // Get row and column breaks
  802.         $aRowBreaks = array();
  803.         $aColumnBreaks = array();
  804.         foreach ($pSheet->getBreaks() as $cell => $breakType) {
  805.             if ($breakType == PHPExcel_Worksheet::BREAK_ROW) {
  806.                 $aRowBreaks[] = $cell;
  807.             } else if ($breakType == PHPExcel_Worksheet::BREAK_COLUMN) {
  808.                 $aColumnBreaks[] = $cell;
  809.             }
  810.         }
  811.  
  812.         // rowBreaks
  813.         if (count($aRowBreaks) > 0) {
  814.             $objWriter->startElement('rowBreaks');
  815.             $objWriter->writeAttribute('count',            count($aRowBreaks));
  816.             $objWriter->writeAttribute('manualBreakCount',    count($aRowBreaks));
  817.  
  818.                 foreach ($aRowBreaks as $cell) {
  819.                     $coords = PHPExcel_Cell::coordinateFromString($cell);
  820.  
  821.                     $objWriter->startElement('brk');
  822.                     $objWriter->writeAttribute('id',    $coords[1]);
  823.                     $objWriter->writeAttribute('man',    '1');
  824.                     $objWriter->endElement();
  825.                 }
  826.  
  827.             $objWriter->endElement();
  828.         }
  829.  
  830.         // Second, write column breaks
  831.         if (count($aColumnBreaks) > 0) {
  832.             $objWriter->startElement('colBreaks');
  833.             $objWriter->writeAttribute('count',            count($aColumnBreaks));
  834.             $objWriter->writeAttribute('manualBreakCount',    count($aColumnBreaks));
  835.  
  836.                 foreach ($aColumnBreaks as $cell) {
  837.                     $coords = PHPExcel_Cell::coordinateFromString($cell);
  838.  
  839.                     $objWriter->startElement('brk');
  840.                     $objWriter->writeAttribute('id',    PHPExcel_Cell::columnIndexFromString($coords[0]) - 1);
  841.                     $objWriter->writeAttribute('man',    '1');
  842.                     $objWriter->endElement();
  843.                 }
  844.  
  845.             $objWriter->endElement();
  846.         }
  847.     }
  848.  
  849.     /**
  850.      * Write SheetData
  851.      *
  852.      * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer
  853.      * @param    PHPExcel_Worksheet                $pSheet            Worksheet
  854.      * @param    string[]                        $pStringTable    String table
  855.      * @throws    Exception
  856.      */
  857.     private function _writeSheetData(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null, $pStringTable = null)
  858.     {
  859.         if (is_array($pStringTable)) {
  860.             // Flipped stringtable, for faster index searching
  861.             $aFlippedStringTable = $this->getParentWriter()->getWriterPart('stringtable')->flipStringTable($pStringTable);
  862.  
  863.             // sheetData
  864.             $objWriter->startElement('sheetData');
  865.  
  866.                 // Get column count
  867.                 $colCount = PHPExcel_Cell::columnIndexFromString($pSheet->getHighestColumn());
  868.  
  869.                 // Highest row number
  870.                 $highestRow = $pSheet->getHighestRow();
  871.  
  872.                 // Loop through cells
  873.                 $cellsByRow = array();
  874.                 foreach ($pSheet->getCellCollection() as $cellID) {
  875.                     $cellAddress = PHPExcel_Cell::coordinateFromString($cellID);
  876.                     $cellsByRow[$cellAddress[1]][] = $cellID;
  877.                 }
  878.  
  879.                 $currentRow = 0;
  880.                 while($currentRow++ < $highestRow) {
  881.                     // Get row dimension
  882.                     $rowDimension = $pSheet->getRowDimension($currentRow);
  883.  
  884.                     // Write current row?
  885.                     $writeCurrentRow =    isset($cellsByRow[$currentRow]) ||
  886.                                         $rowDimension->getRowHeight() >= 0 ||
  887.                                         $rowDimension->getVisible() == false ||
  888.                                         $rowDimension->getCollapsed() == true ||
  889.                                         $rowDimension->getOutlineLevel() > 0 ||
  890.                                         $rowDimension->getXfIndex() !== null;
  891.  
  892.                     if ($writeCurrentRow) {
  893.                         // Start a new row
  894.                         $objWriter->startElement('row');
  895.                         $objWriter->writeAttribute('r',    $currentRow);
  896.                         $objWriter->writeAttribute('spans',    '1:' . $colCount);
  897.  
  898.                         // Row dimensions
  899.                         if ($rowDimension->getRowHeight() >= 0) {
  900.                             $objWriter->writeAttribute('customHeight',    '1');
  901.                             $objWriter->writeAttribute('ht',            PHPExcel_Shared_String::FormatNumber($rowDimension->getRowHeight()));
  902.                         }
  903.  
  904.                         // Row visibility
  905.                         if ($rowDimension->getVisible() == false) {
  906.                             $objWriter->writeAttribute('hidden',        'true');
  907.                         }
  908.  
  909.                         // Collapsed
  910.                         if ($rowDimension->getCollapsed() == true) {
  911.                             $objWriter->writeAttribute('collapsed',        'true');
  912.                         }
  913.  
  914.                         // Outline level
  915.                         if ($rowDimension->getOutlineLevel() > 0) {
  916.                             $objWriter->writeAttribute('outlineLevel',    $rowDimension->getOutlineLevel());
  917.                         }
  918.  
  919.                         // Style
  920.                         if ($rowDimension->getXfIndex() !== null) {
  921.                             $objWriter->writeAttribute('s',    $rowDimension->getXfIndex());
  922.                             $objWriter->writeAttribute('customFormat', '1');
  923.                         }
  924.  
  925.                         // Write cells
  926.                         if (isset($cellsByRow[$currentRow])) {
  927.                             foreach($cellsByRow[$currentRow] as $cellAddress) {
  928.                                 // Write cell
  929.                                 $this->_writeCell($objWriter, $pSheet, $cellAddress, $pStringTable, $aFlippedStringTable);
  930.                             }
  931.                         }
  932.  
  933.                         // End row
  934.                         $objWriter->endElement();
  935.                     }
  936.                 }
  937.  
  938.             $objWriter->endElement();
  939.         } else {
  940.             throw new Exception("Invalid parameters passed.");
  941.         }
  942.     }
  943.  
  944.     /**
  945.      * Write Cell
  946.      *
  947.      * @param    PHPExcel_Shared_XMLWriter    $objWriter                XML Writer
  948.      * @param    PHPExcel_Worksheet            $pSheet                    Worksheet
  949.      * @param    PHPExcel_Cell                $pCell                    Cell
  950.      * @param    string[]                    $pStringTable            String table
  951.      * @param    string[]                    $pFlippedStringTable    String table (flipped), for faster index searching
  952.      * @throws    Exception
  953.      */
  954.     private function _writeCell(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null, $pCellAddress = null, $pStringTable = null, $pFlippedStringTable = null)
  955.     {
  956.         if (is_array($pStringTable) && is_array($pFlippedStringTable)) {
  957.             // Cell
  958.             $pCell = $pSheet->getCell($pCellAddress);
  959.             $objWriter->startElement('c');
  960.             $objWriter->writeAttribute('r', $pCellAddress);
  961.  
  962.             // Sheet styles
  963.             if ($pCell->getXfIndex() != '') {
  964.                 $objWriter->writeAttribute('s', $pCell->getXfIndex());
  965.             }
  966.  
  967.             // If cell value is supplied, write cell value
  968.             $cellValue = $pCell->getValue();
  969.             if (is_object($cellValue) || $cellValue !== '') {
  970.                 // Map type
  971.                 $mappedType = $pCell->getDataType();
  972.  
  973.                 // Write data type depending on its type
  974.                 switch (strtolower($mappedType)) {
  975.                     case 'inlinestr':    // Inline string
  976.                     case 's':            // String
  977.                     case 'b':            // Boolean
  978.                         $objWriter->writeAttribute('t', $mappedType);
  979.                         break;
  980.                     case 'f':            // Formula
  981.                         $calculatedValue = null;
  982.                         if ($this->getParentWriter()->getPreCalculateFormulas()) {
  983.                             $calculatedValue = $pCell->getCalculatedValue();
  984.                         } else {
  985.                             $calculatedValue = $cellValue;
  986.                         }
  987.                         if (is_string($calculatedValue)) {
  988.                             $objWriter->writeAttribute('t', 'str');
  989.                         }
  990.                         break;
  991.                     case 'e':            // Error
  992.                         $objWriter->writeAttribute('t', $mappedType);
  993.                 }
  994.  
  995.                 // Write data depending on its type
  996.                 switch (strtolower($mappedType)) {
  997.                     case 'inlinestr':    // Inline string
  998.                         if (! $cellValue instanceof PHPExcel_RichText) {
  999.                             $objWriter->writeElement('t', PHPExcel_Shared_String::ControlCharacterPHP2OOXML( htmlspecialchars($cellValue) ) );
  1000.                         } else if ($cellValue instanceof PHPExcel_RichText) {
  1001.                             $objWriter->startElement('is');
  1002.                             $this->getParentWriter()->getWriterPart('stringtable')->writeRichText($objWriter, $cellValue);
  1003.                             $objWriter->endElement();
  1004.                         }
  1005.  
  1006.                         break;
  1007.                     case 's':            // String
  1008.                         if (! $cellValue instanceof PHPExcel_RichText) {
  1009.                             if (isset($pFlippedStringTable[$cellValue])) {
  1010.                                 $objWriter->writeElement('v', $pFlippedStringTable[$cellValue]);
  1011.                             }
  1012.                         } else if ($cellValue instanceof PHPExcel_RichText) {
  1013.                             $objWriter->writeElement('v', $pFlippedStringTable[$cellValue->getHashCode()]);
  1014.                         }
  1015.  
  1016.                         break;
  1017.                     case 'f':            // Formula
  1018.                         $attributes = $pCell->getFormulaAttributes();
  1019.                         if($attributes['t'] == 'array') {
  1020.                             $objWriter->startElement('f');
  1021.                             $objWriter->writeAttribute('t', 'array');
  1022.                             $objWriter->writeAttribute('ref', $pCellAddress);
  1023.                             $objWriter->writeAttribute('aca', '1');
  1024.                             $objWriter->writeAttribute('ca', '1');
  1025.                             $objWriter->text(substr($cellValue, 1));
  1026.                             $objWriter->endElement();
  1027.                         } else {
  1028.                             $objWriter->writeElement('f', substr($cellValue, 1));
  1029.                         }
  1030.                         if ($this->getParentWriter()->getOffice2003Compatibility() === false) {
  1031.                             if ($this->getParentWriter()->getPreCalculateFormulas()) {
  1032.                                 $calculatedValue = $pCell->getCalculatedValue();
  1033.                                 if (!is_array($calculatedValue) && substr($calculatedValue, 0, 1) != '#') {
  1034.                                     $objWriter->writeElement('v', PHPExcel_Shared_String::FormatNumber($calculatedValue));
  1035.                                 } else {
  1036.                                     $objWriter->writeElement('v', '0');
  1037.                                 }
  1038.                             } else {
  1039.                                 $objWriter->writeElement('v', '0');
  1040.                             }
  1041.                         }
  1042.                         break;
  1043.                     case 'n':            // Numeric
  1044.                         // force point as decimal separator in case current locale uses comma
  1045.                         $objWriter->writeElement('v', str_replace(',', '.', $cellValue));
  1046.                         break;
  1047.                     case 'b':            // Boolean
  1048.                         $objWriter->writeElement('v', ($cellValue ? '1' : '0'));
  1049.                         break;
  1050.                     case 'e':            // Error
  1051.                         if (substr($cellValue, 0, 1) == '=') {
  1052.                             $objWriter->writeElement('f', substr($cellValue, 1));
  1053.                             $objWriter->writeElement('v', substr($cellValue, 1));
  1054.                         } else {
  1055.                             $objWriter->writeElement('v', $cellValue);
  1056.                         }
  1057.  
  1058.                         break;
  1059.                 }
  1060.             }
  1061.  
  1062.             $objWriter->endElement();
  1063.         } else {
  1064.             throw new Exception("Invalid parameters passed.");
  1065.         }
  1066.     }
  1067.  
  1068.     /**
  1069.      * Write Drawings
  1070.      *
  1071.      * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer
  1072.      * @param    PHPExcel_Worksheet                $pSheet            Worksheet
  1073.      * @throws    Exception
  1074.      */
  1075.     private function _writeDrawings(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  1076.     {
  1077.         // If sheet contains drawings, add the relationships
  1078.         if ($pSheet->getDrawingCollection()->count() > 0) {
  1079.             $objWriter->startElement('drawing');
  1080.             $objWriter->writeAttribute('r:id', 'rId1');
  1081.             $objWriter->endElement();
  1082.         }
  1083.     }
  1084.  
  1085.     /**
  1086.      * Write LegacyDrawing
  1087.      *
  1088.      * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer
  1089.      * @param    PHPExcel_Worksheet                $pSheet            Worksheet
  1090.      * @throws    Exception
  1091.      */
  1092.     private function _writeLegacyDrawing(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  1093.     {
  1094.         // If sheet contains comments, add the relationships
  1095.         if (count($pSheet->getComments()) > 0) {
  1096.             $objWriter->startElement('legacyDrawing');
  1097.             $objWriter->writeAttribute('r:id', 'rId_comments_vml1');
  1098.             $objWriter->endElement();
  1099.         }
  1100.     }
  1101.  
  1102.     /**
  1103.      * Write LegacyDrawingHF
  1104.      *
  1105.      * @param    PHPExcel_Shared_XMLWriter        $objWriter        XML Writer
  1106.      * @param    PHPExcel_Worksheet                $pSheet            Worksheet
  1107.      * @throws    Exception
  1108.      */
  1109.     private function _writeLegacyDrawingHF(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
  1110.     {
  1111.         // If sheet contains comments, add the relationships
  1112.         if (count($pSheet->getHeaderFooter()->getImages()) > 0) {
  1113.             $objWriter->startElement('legacyDrawingHF');
  1114.             $objWriter->writeAttribute('r:id', 'rId_headerfooter_vml1');
  1115.             $objWriter->endElement();
  1116.         }
  1117.     }
  1118. }

Documentation generated on Sun, 27 Feb 2011 16:37:26 -0800 by phpDocumentor 1.4.3