[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/lib/phpexcel/PHPExcel/Writer/Excel2007/ -> Worksheet.php (source)

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


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1