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

Documentation generated on Mon, 11 Jan 2010 08:18:51 +0100 by phpDocumentor 1.4.1