Source for file Worksheet.php
Documentation is available at Worksheet.php
* Copyright (c) 2006 - 2009 PHPExcel
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* @package PHPExcel_Writer_Excel2007
* @copyright Copyright (c) 2006 - 2009 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.6.5, 2009-01-05
/** PHPExcel_Writer_Excel2007 */
require_once 'PHPExcel/Writer/Excel2007.php';
/** PHPExcel_Writer_Excel2007_WriterPart */
require_once 'PHPExcel/Writer/Excel2007/WriterPart.php';
require_once 'PHPExcel/Cell.php';
/** PHPExcel_Worksheet */
require_once 'PHPExcel/Worksheet.php';
/** PHPExcel_Style_Conditional */
require_once 'PHPExcel/Style/Conditional.php';
/** PHPExcel_Style_NumberFormat */
require_once 'PHPExcel/Style/NumberFormat.php';
/** PHPExcel_Shared_Font */
require_once 'PHPExcel/Shared/Font.php';
/** PHPExcel_Shared_Date */
require_once 'PHPExcel/Shared/Date.php';
/** PHPExcel_Shared_String */
require_once 'PHPExcel/Shared/String.php';
require_once 'PHPExcel/RichText.php';
/** PHPExcel_Shared_XMLWriter */
require_once 'PHPExcel/Shared/XMLWriter.php';
* PHPExcel_Writer_Excel2007_Worksheet
* @package PHPExcel_Writer_Excel2007
* @copyright Copyright (c) 2006 - 2009 PHPExcel (http://www.codeplex.com/PHPExcel)
* Write worksheet to XML format
* @param PHPExcel_Worksheet $pSheet
* @param string[] $pStringTable
* @return string XML Output
$objWriter->startDocument('1.0','UTF-8','yes');
$objWriter->startElement('worksheet');
$objWriter->writeAttribute('xml:space', 'preserve');
$objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main');
$objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
$objWriter->endElement();
return $objWriter->getData();
throw new Exception("Invalid PHPExcel_Worksheet object passed.");
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeSheetPr(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
$objWriter->startElement('sheetPr');
$objWriter->writeAttribute('codeName', $pSheet->getTitle());
$objWriter->startElement('outlinePr');
$objWriter->writeAttribute('summaryBelow', ($pSheet->getShowSummaryBelow() ? '1' : '0'));
$objWriter->writeAttribute('summaryRight', ($pSheet->getShowSummaryRight() ? '1' : '0'));
$objWriter->endElement();
if (!is_null($pSheet->getPageSetup()->getFitToHeight()) || !is_null($pSheet->getPageSetup()->getFitToWidth())) {
$objWriter->startElement('pageSetUpPr');
$objWriter->writeAttribute('fitToPage', '1');
$objWriter->endElement();
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeDimension(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
$objWriter->startElement('dimension');
$objWriter->writeAttribute('ref', $pSheet->calculateWorksheetDimension());
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeSheetViews(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
$objWriter->startElement('sheetViews');
$objWriter->startElement('sheetView');
$objWriter->writeAttribute('tabSelected', $sheetSelected ? '1' : '0');
$objWriter->writeAttribute('workbookViewId', '0');
if ($pSheet->getSheetView()->getZoomScale() != 100) {
$objWriter->writeAttribute('zoomScale', $pSheet->getSheetView()->getZoomScale());
if ($pSheet->getSheetView()->getZoomScaleNormal() != 100) {
$objWriter->writeAttribute('zoomScaleNormal', $pSheet->getSheetView()->getZoomScaleNormal());
if ($pSheet->getShowGridlines()) {
$objWriter->writeAttribute('showGridLines', 'true');
$objWriter->writeAttribute('showGridLines', 'false');
if ($pSheet->getFreezePane() != '') {
// Calculate freeze coordinates
$topLeftCell = $pSheet->getFreezePane();
$objWriter->startElement('pane');
$objWriter->writeAttribute('xSplit', $xSplit - 1);
$objWriter->writeAttribute('ySplit', $ySplit - 1);
$objWriter->writeAttribute('topLeftCell', $topLeftCell);
$objWriter->writeAttribute('activePane', 'bottomRight');
$objWriter->writeAttribute('state', 'frozen');
$objWriter->endElement();
$objWriter->startElement('selection');
$objWriter->writeAttribute('activeCell', $pSheet->getSelectedCell());
$objWriter->writeAttribute('sqref', $pSheet->getSelectedCell());
$objWriter->endElement();
$objWriter->endElement();
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeSheetFormatPr(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
$objWriter->startElement('sheetFormatPr');
if ($pSheet->getDefaultRowDimension()->getRowHeight() >= 0) {
$objWriter->writeAttribute('customHeight', 'true');
$objWriter->writeAttribute('defaultRowHeight', '12.75');
if ($pSheet->getDefaultColumnDimension()->getWidth() >= 0) {
foreach ($pSheet->getRowDimensions() as $dimension) {
if ($dimension->getOutlineLevel() > $outlineLevelRow) {
$outlineLevelRow = $dimension->getOutlineLevel();
$objWriter->writeAttribute('outlineLevelRow', (int) $outlineLevelRow);
// Outline level - column
foreach ($pSheet->getColumnDimensions() as $dimension) {
if ($dimension->getOutlineLevel() > $outlineLevelCol) {
$outlineLevelCol = $dimension->getOutlineLevel();
$objWriter->writeAttribute('outlineLevelCol', (int) $outlineLevelCol);
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeCols(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
$objWriter->startElement('cols');
// Check if there is at least one column dimension specified. If not, create one.
if (count($pSheet->getColumnDimensions()) == 0) {
if ($pSheet->getDefaultColumnDimension()->getWidth() >= 0) {
$pSheet->getColumnDimension('A')->setWidth($pSheet->getDefaultColumnDimension()->getWidth());
$pSheet->getColumnDimension('A')->setWidth(10);
$pSheet->calculateColumnWidths();
// Loop trough column dimensions
foreach ($pSheet->getColumnDimensions() as $colDimension) {
$objWriter->startElement('col');
if ($colDimension->getWidth() < 0) {
// No width set, apply default of 10
$objWriter->writeAttribute('width', '10');
if ($colDimension->getVisible() == false) {
$objWriter->writeAttribute('hidden', 'true');
if ($colDimension->getAutoSize()) {
$objWriter->writeAttribute('bestFit', 'true');
if ($colDimension->getWidth() != $pSheet->getDefaultColumnDimension()->getWidth()) {
$objWriter->writeAttribute('customWidth', 'true');
if ($colDimension->getCollapsed() == true) {
$objWriter->writeAttribute('collapsed', 'true');
if ($colDimension->getOutlineLevel() > 0) {
$objWriter->writeAttribute('outlineLevel', $colDimension->getOutlineLevel());
$styleIndex = $this->getParentWriter()->getStylesHashTable()->getIndexForHashCode( $pSheet->getDefaultStyle()->getHashCode() );
$objWriter->writeAttribute('style', $styleIndex);
$objWriter->endElement();
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeSheetProtection(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
$objWriter->startElement('sheetProtection');
if ($pSheet->getProtection()->getPassword() != '') {
$objWriter->writeAttribute('password', $pSheet->getProtection()->getPassword());
$objWriter->writeAttribute('sheet', ($pSheet->getProtection()->getSheet() ? 'true' : 'false'));
$objWriter->writeAttribute('objects', ($pSheet->getProtection()->getObjects() ? 'true' : 'false'));
$objWriter->writeAttribute('scenarios', ($pSheet->getProtection()->getScenarios() ? 'true' : 'false'));
$objWriter->writeAttribute('formatCells', ($pSheet->getProtection()->getFormatCells() ? 'true' : 'false'));
$objWriter->writeAttribute('formatColumns', ($pSheet->getProtection()->getFormatColumns() ? 'true' : 'false'));
$objWriter->writeAttribute('formatRows', ($pSheet->getProtection()->getFormatRows() ? 'true' : 'false'));
$objWriter->writeAttribute('insertColumns', ($pSheet->getProtection()->getInsertColumns() ? 'true' : 'false'));
$objWriter->writeAttribute('insertRows', ($pSheet->getProtection()->getInsertRows() ? 'true' : 'false'));
$objWriter->writeAttribute('insertHyperlinks', ($pSheet->getProtection()->getInsertHyperlinks() ? 'true' : 'false'));
$objWriter->writeAttribute('deleteColumns', ($pSheet->getProtection()->getDeleteColumns() ? 'true' : 'false'));
$objWriter->writeAttribute('deleteRows', ($pSheet->getProtection()->getDeleteRows() ? 'true' : 'false'));
$objWriter->writeAttribute('selectLockedCells', ($pSheet->getProtection()->getSelectLockedCells() ? 'true' : 'false'));
$objWriter->writeAttribute('sort', ($pSheet->getProtection()->getSort() ? 'true' : 'false'));
$objWriter->writeAttribute('autoFilter', ($pSheet->getProtection()->getAutoFilter() ? 'true' : 'false'));
$objWriter->writeAttribute('pivotTables', ($pSheet->getProtection()->getPivotTables() ? 'true' : 'false'));
$objWriter->writeAttribute('selectUnlockedCells', ($pSheet->getProtection()->getSelectUnlockedCells() ? 'true' : 'false'));
$objWriter->endElement();
* Write ConditionalFormatting
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
// Loop trough styles in the current worksheet
foreach ($pSheet->getStyles() as $cellCoordinate => $style) {
if (count($style->getConditionalStyles()) > 0) {
foreach ($style->getConditionalStyles() as $conditional) {
// if ($this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode( $conditional->getHashCode() ) == '') {
$objWriter->startElement('conditionalFormatting');
$objWriter->writeAttribute('sqref', $cellCoordinate);
$objWriter->startElement('cfRule');
$objWriter->writeAttribute('type', $conditional->getConditionType());
$objWriter->writeAttribute('dxfId', $this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode( $conditional->getHashCode() ));
$objWriter->writeAttribute('priority', $id++ );
$objWriter->writeAttribute('operator', $conditional->getOperatorType());
&& !is_null($conditional->getText())) {
$objWriter->writeAttribute('text', $conditional->getText());
foreach ($conditional->getConditions() as $formula) {
$objWriter->writeElement('formula', $formula);
$objWriter->endElement();
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeDataValidations(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
// Build a temporary array of datavalidation objects
$aDataValidations = array();
foreach ($pSheet->getCellCollection() as $cell) {
if ($cell->hasDataValidation()) {
$aDataValidations[] = $cell->getDataValidation();
// Write data validations?
if (count($aDataValidations) > 0) {
$objWriter->startElement('dataValidations');
$objWriter->writeAttribute('count', count($aDataValidations));
foreach ($aDataValidations as $dv) {
$objWriter->startElement('dataValidation');
if ($dv->getType() != '') {
$objWriter->writeAttribute('type', $dv->getType());
if ($dv->getErrorStyle() != '') {
$objWriter->writeAttribute('errorStyle', $dv->getErrorStyle());
if ($dv->getOperator() != '') {
$objWriter->writeAttribute('operator', $dv->getOperator());
$objWriter->writeAttribute('allowBlank', ($dv->getAllowBlank() ? '1' : '0'));
$objWriter->writeAttribute('showDropDown', (!$dv->getShowDropDown() ? '1' : '0'));
$objWriter->writeAttribute('showInputMessage', ($dv->getShowInputMessage() ? '1' : '0'));
$objWriter->writeAttribute('showErrorMessage', ($dv->getShowErrorMessage() ? '1' : '0'));
if ($dv->getErrorTitle() != '') {
$objWriter->writeAttribute('errorTitle', $dv->getErrorTitle());
if ($dv->getError() != '') {
$objWriter->writeAttribute('error', $dv->getError());
if ($dv->getPromptTitle() != '') {
$objWriter->writeAttribute('promptTitle', $dv->getPromptTitle());
if ($dv->getPrompt() != '') {
$objWriter->writeAttribute('prompt', $dv->getPrompt());
$objWriter->writeAttribute('sqref', $dv->getParent()->getCoordinate());
if ($dv->getFormula1() != '') {
$objWriter->writeElement('formula1', $dv->getFormula1());
if ($dv->getFormula2() != '') {
$objWriter->writeElement('formula2', $dv->getFormula2());
$objWriter->endElement();
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeHyperlinks(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
// Build a temporary array of hyperlink objects
foreach ($pSheet->getCellCollection() as $cell) {
if ($cell->hasHyperlink()) {
$aHyperlinks[] = $cell->getHyperlink();
if (count($aHyperlinks) > 0) {
$objWriter->startElement('hyperlinks');
foreach ($aHyperlinks as $hyperlink) {
$objWriter->startElement('hyperlink');
$objWriter->writeAttribute('ref', $hyperlink->getParent()->getCoordinate());
if (!$hyperlink->isInternal()) {
$objWriter->writeAttribute('r:id', 'rId_hyperlink_' . $relationId);
$objWriter->writeAttribute('location', str_replace('sheet://', '', $hyperlink->getUrl()));
if ($hyperlink->getTooltip() != '') {
$objWriter->writeAttribute('tooltip', $hyperlink->getTooltip());
$objWriter->endElement();
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeProtectedRanges(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
if (count($pSheet->getProtectedCells()) > 0) {
$objWriter->startElement('protectedRanges');
foreach ($pSheet->getProtectedCells() as $protectedCell => $passwordHash) {
$objWriter->startElement('protectedRange');
$objWriter->writeAttribute('name', 'p' . md5($protectedCell));
$objWriter->writeAttribute('sqref', $protectedCell);
$objWriter->writeAttribute('password', $passwordHash);
$objWriter->endElement();
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeMergeCells(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
if (count($pSheet->getMergeCells()) > 0) {
$objWriter->startElement('mergeCells');
foreach ($pSheet->getMergeCells() as $mergeCell) {
$objWriter->startElement('mergeCell');
$objWriter->writeAttribute('ref', $mergeCell);
$objWriter->endElement();
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writePrintOptions(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
$objWriter->startElement('printOptions');
$objWriter->writeAttribute('gridLines', ($pSheet->getPrintGridlines() ? 'true': 'false'));
$objWriter->writeAttribute('gridLinesSet', 'true');
if ($pSheet->getPageSetup()->getHorizontalCentered()) {
$objWriter->writeAttribute('horizontalCentered', 'true');
if ($pSheet->getPageSetup()->getVerticalCentered()) {
$objWriter->writeAttribute('verticalCentered', 'true');
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writePageMargins(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
$objWriter->startElement('pageMargins');
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeAutoFilter(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
if ($pSheet->getAutoFilter() != '') {
$objWriter->startElement('autoFilter');
$objWriter->writeAttribute('ref', $pSheet->getAutoFilter());
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writePageSetup(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
$objWriter->startElement('pageSetup');
$objWriter->writeAttribute('paperSize', $pSheet->getPageSetup()->getPaperSize());
$objWriter->writeAttribute('orientation', $pSheet->getPageSetup()->getOrientation());
if (!is_null($pSheet->getPageSetup()->getScale())) {
$objWriter->writeAttribute('scale', $pSheet->getPageSetup()->getScale());
if (!is_null($pSheet->getPageSetup()->getFitToHeight())) {
$objWriter->writeAttribute('fitToHeight', $pSheet->getPageSetup()->getFitToHeight());
$objWriter->writeAttribute('fitToHeight', '0');
if (!is_null($pSheet->getPageSetup()->getFitToWidth())) {
$objWriter->writeAttribute('fitToWidth', $pSheet->getPageSetup()->getFitToWidth());
$objWriter->writeAttribute('fitToWidth', '0');
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeHeaderFooter(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
$objWriter->startElement('headerFooter');
$objWriter->writeAttribute('differentOddEven', ($pSheet->getHeaderFooter()->getDifferentOddEven() ? 'true' : 'false'));
$objWriter->writeAttribute('differentFirst', ($pSheet->getHeaderFooter()->getDifferentFirst() ? 'true' : 'false'));
$objWriter->writeAttribute('scaleWithDoc', ($pSheet->getHeaderFooter()->getScaleWithDocument() ? 'true' : 'false'));
$objWriter->writeAttribute('alignWithMargins', ($pSheet->getHeaderFooter()->getAlignWithMargins() ? 'true' : 'false'));
$objWriter->writeElement('oddHeader', $pSheet->getHeaderFooter()->getOddHeader());
$objWriter->writeElement('oddFooter', $pSheet->getHeaderFooter()->getOddFooter());
$objWriter->writeElement('evenHeader', $pSheet->getHeaderFooter()->getEvenHeader());
$objWriter->writeElement('evenFooter', $pSheet->getHeaderFooter()->getEvenFooter());
$objWriter->writeElement('firstHeader', $pSheet->getHeaderFooter()->getFirstHeader());
$objWriter->writeElement('firstFooter', $pSheet->getHeaderFooter()->getFirstFooter());
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeBreaks(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
// Get row and column breaks
$aColumnBreaks = array();
foreach ($pSheet->getBreaks() as $cell => $breakType) {
$aColumnBreaks[] = $cell;
if (count($aRowBreaks) > 0) {
$objWriter->startElement('rowBreaks');
$objWriter->writeAttribute('count', count($aRowBreaks));
$objWriter->writeAttribute('manualBreakCount', count($aRowBreaks));
foreach ($aRowBreaks as $cell) {
$objWriter->startElement('brk');
$objWriter->writeAttribute('id', $coords[1]);
$objWriter->writeAttribute('man', '1');
$objWriter->endElement();
$objWriter->endElement();
// Second, write column breaks
if (count($aColumnBreaks) > 0) {
$objWriter->startElement('colBreaks');
$objWriter->writeAttribute('count', count($aColumnBreaks));
$objWriter->writeAttribute('manualBreakCount', count($aColumnBreaks));
foreach ($aColumnBreaks as $cell) {
$objWriter->startElement('brk');
$objWriter->writeAttribute('man', '1');
$objWriter->endElement();
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
* @param string[] $pStringTable String table
private function _writeSheetData(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null, $pStringTable = null)
// Flipped stringtable, for faster index searching
$aFlippedStringTable = $this->getParentWriter()->getWriterPart('stringtable')->flipStringTable($pStringTable);
$objWriter->startElement('sheetData');
$highestRow = $pSheet->getHighestRow();
$cellCollection = $pSheet->getCellCollection();
foreach ($cellCollection as $cell) {
$cellsByRow[$cell->getRow()][] = $cell;
for ($currentRow = 1; $currentRow <= $highestRow; ++ $currentRow) {
$rowDimension = $pSheet->getRowDimension($currentRow);
$objWriter->startElement('row');
$objWriter->writeAttribute('r', $currentRow);
$objWriter->writeAttribute('spans', '1:' . $colCount);
if ($rowDimension->getRowHeight() >= 0) {
$objWriter->writeAttribute('customHeight', '1');
$objWriter->writeAttribute('ht', $rowDimension->getRowHeight());
if ($rowDimension->getVisible() == false) {
$objWriter->writeAttribute('hidden', 'true');
if ($rowDimension->getCollapsed() == true) {
$objWriter->writeAttribute('collapsed', 'true');
if ($rowDimension->getOutlineLevel() > 0) {
$objWriter->writeAttribute('outlineLevel', $rowDimension->getOutlineLevel());
if(isset ($cellsByRow[$currentRow])) {
foreach($cellsByRow[$currentRow] as $cell) {
$this->_writeCell($objWriter, $pSheet, $cell, $pStringTable, $aFlippedStringTable);
$objWriter->endElement();
$objWriter->endElement();
throw new Exception("Invalid parameters passed.");
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
* @param PHPExcel_Cell $pCell Cell
* @param string[] $pStringTable String table
* @param string[] $pFlippedStringTable String table (flipped), for faster index searching
private function _writeCell(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null, PHPExcel_Cell $pCell = null, $pStringTable = null, $pFlippedStringTable = null)
$objWriter->startElement('c');
$objWriter->writeAttribute('r', $pCell->getCoordinate());
$aStyles = $pSheet->getStyles();
if (isset ($aStyles[$pCell->getCoordinate()])) {
$styleIndex = $aStyles[$pCell->getCoordinate()]->getHashIndex();
$styleIndex = $pSheet->getDefaultStyle()->getHashIndex();
$objWriter->writeAttribute('s', $styleIndex);
// If cell value is supplied, write cell value
if (is_object($pCell->getValue()) || $pCell->getValue() !== '') {
$mappedType = $pCell->getDataType();
// Write data type depending on its type
case 'inlinestr': // Inline string
$objWriter->writeAttribute('t', $mappedType);
$objWriter->writeAttribute('t', $mappedType);
$objWriter->writeAttribute('t', $mappedType);
$calculatedValue = $pCell->getCalculatedValue();
$calculatedValue = $pCell->getValue();
$objWriter->writeAttribute('t', 'str');
$objWriter->writeAttribute('t', $mappedType);
// Write data depending on its type
case 'inlinestr': // Inline string
$objWriter->startElement('is');
$this->getParentWriter()->getWriterPart('stringtable')->writeRichText($objWriter, $pCell->getValue());
$objWriter->endElement();
if (isset ($pFlippedStringTable[$pCell->getValue()])) {
$objWriter->writeElement('v', $pFlippedStringTable[$pCell->getValue()]);
$objWriter->writeElement('v', $pFlippedStringTable[$pCell->getValue()->getHashCode()]);
$objWriter->writeElement('f', substr($pCell->getValue(), 1));
$calculatedValue = $pCell->getCalculatedValue();
if (!is_array($calculatedValue) && substr($calculatedValue, 0, 1) != '#') {
$objWriter->writeElement('v', $calculatedValue);
$objWriter->writeElement('v', '0');
$objWriter->writeElement('v', '0');
$dateValue = $pCell->getValue();
$objWriter->writeElement('v', $pFlippedStringTable[$dateValue]);
// PHP serialized date/time or date/time object
// Excel serialized date/time
$objWriter->writeElement('v', $dateValue);
$objWriter->writeElement('v', $pCell->getValue());
$objWriter->writeElement('v', ($pCell->getValue() ? '1' : '0'));
if (substr($pCell->getValue(), 0, 1) == '=') {
$objWriter->writeElement('f', substr($pCell->getValue(), 1));
$objWriter->writeElement('v', substr($pCell->getValue(), 1));
$objWriter->writeElement('v', $pCell->getValue());
$objWriter->endElement();
throw new Exception("Invalid parameters passed.");
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeDrawings(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
// If sheet contains drawings, add the relationships
if ($pSheet->getDrawingCollection()->count() > 0) {
$objWriter->startElement('drawing');
$objWriter->writeAttribute('r:id', 'rId1');
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeLegacyDrawing(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
// If sheet contains comments, add the relationships
if (count($pSheet->getComments()) > 0) {
$objWriter->startElement('legacyDrawing');
$objWriter->writeAttribute('r:id', 'rId_comments_vml1');
$objWriter->endElement();
* @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
* @param PHPExcel_Worksheet $pSheet Worksheet
private function _writeLegacyDrawingHF(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null)
// If sheet contains comments, add the relationships
if (count($pSheet->getHeaderFooter()->getImages()) > 0) {
$objWriter->startElement('legacyDrawingHF');
$objWriter->writeAttribute('r:id', 'rId_headerfooter_vml' . ($pSheet->getParent()->getIndex($pSheet) + 1));
$objWriter->endElement();
|