Ejemplo n.º 1
0
 /**
  * TEXTFORMAT
  *
  * @param    mixed    $value    Value to check
  * @param    string    $format    Format mask to use
  * @return    boolean
  */
 public static function TEXTFORMAT($value, $format)
 {
     $value = Functions::flattenSingleValue($value);
     $format = Functions::flattenSingleValue($format);
     if (is_string($value) && !is_numeric($value) && \PHPExcel\Shared\Date::isDateTimeFormatCode($format)) {
         $value = DateTime::DATEVALUE($value);
     }
     return (string) \PHPExcel\Style\NumberFormat::toFormattedString($value, $format);
 }
Ejemplo n.º 2
0
 /**
  * Loads PHPExcel from file into PHPExcel instance
  *
  * @param     string         $pFilename
  * @param    PHPExcel    $objPHPExcel
  * @return     PHPExcel
  * @throws     Exception
  */
 public function loadIntoExisting($pFilename, PHPExcel $objPHPExcel)
 {
     // Check if file exists
     if (!file_exists($pFilename)) {
         throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
     }
     $timezoneObj = new DateTimeZone('Europe/London');
     $GMT = new DateTimeZone('UTC');
     $gFileData = $this->gzfileGetContents($pFilename);
     //        echo '<pre>';
     //        echo htmlentities($gFileData,ENT_QUOTES,'UTF-8');
     //        echo '</pre><hr />';
     //
     $xml = simplexml_load_string($this->securityScan($gFileData), 'SimpleXMLElement', \PHPExcel\Settings::getLibXmlLoaderOptions());
     $namespacesMeta = $xml->getNamespaces(true);
     //        var_dump($namespacesMeta);
     //
     $gnmXML = $xml->children($namespacesMeta['gnm']);
     $docProps = $objPHPExcel->getProperties();
     //    Document Properties are held differently, depending on the version of Gnumeric
     if (isset($namespacesMeta['office'])) {
         $officeXML = $xml->children($namespacesMeta['office']);
         $officeDocXML = $officeXML->{'document-meta'};
         $officeDocMetaXML = $officeDocXML->meta;
         foreach ($officeDocMetaXML as $officePropertyData) {
             $officePropertyDC = array();
             if (isset($namespacesMeta['dc'])) {
                 $officePropertyDC = $officePropertyData->children($namespacesMeta['dc']);
             }
             foreach ($officePropertyDC as $propertyName => $propertyValue) {
                 $propertyValue = (string) $propertyValue;
                 switch ($propertyName) {
                     case 'title':
                         $docProps->setTitle(trim($propertyValue));
                         break;
                     case 'subject':
                         $docProps->setSubject(trim($propertyValue));
                         break;
                     case 'creator':
                         $docProps->setCreator(trim($propertyValue));
                         $docProps->setLastModifiedBy(trim($propertyValue));
                         break;
                     case 'date':
                         $creationDate = strtotime(trim($propertyValue));
                         $docProps->setCreated($creationDate);
                         $docProps->setModified($creationDate);
                         break;
                     case 'description':
                         $docProps->setDescription(trim($propertyValue));
                         break;
                 }
             }
             $officePropertyMeta = array();
             if (isset($namespacesMeta['meta'])) {
                 $officePropertyMeta = $officePropertyData->children($namespacesMeta['meta']);
             }
             foreach ($officePropertyMeta as $propertyName => $propertyValue) {
                 $attributes = $propertyValue->attributes($namespacesMeta['meta']);
                 $propertyValue = (string) $propertyValue;
                 switch ($propertyName) {
                     case 'keyword':
                         $docProps->setKeywords(trim($propertyValue));
                         break;
                     case 'initial-creator':
                         $docProps->setCreator(trim($propertyValue));
                         $docProps->setLastModifiedBy(trim($propertyValue));
                         break;
                     case 'creation-date':
                         $creationDate = strtotime(trim($propertyValue));
                         $docProps->setCreated($creationDate);
                         $docProps->setModified($creationDate);
                         break;
                     case 'user-defined':
                         list(, $attrName) = explode(':', $attributes['name']);
                         switch ($attrName) {
                             case 'publisher':
                                 $docProps->setCompany(trim($propertyValue));
                                 break;
                             case 'category':
                                 $docProps->setCategory(trim($propertyValue));
                                 break;
                             case 'manager':
                                 $docProps->setManager(trim($propertyValue));
                                 break;
                         }
                         break;
                 }
             }
         }
     } elseif (isset($gnmXML->Summary)) {
         foreach ($gnmXML->Summary->Item as $summaryItem) {
             $propertyName = $summaryItem->name;
             $propertyValue = $summaryItem->{'val-string'};
             switch ($propertyName) {
                 case 'title':
                     $docProps->setTitle(trim($propertyValue));
                     break;
                 case 'comments':
                     $docProps->setDescription(trim($propertyValue));
                     break;
                 case 'keywords':
                     $docProps->setKeywords(trim($propertyValue));
                     break;
                 case 'category':
                     $docProps->setCategory(trim($propertyValue));
                     break;
                 case 'manager':
                     $docProps->setManager(trim($propertyValue));
                     break;
                 case 'author':
                     $docProps->setCreator(trim($propertyValue));
                     $docProps->setLastModifiedBy(trim($propertyValue));
                     break;
                 case 'company':
                     $docProps->setCompany(trim($propertyValue));
                     break;
             }
         }
     }
     $worksheetID = 0;
     foreach ($gnmXML->Sheets->Sheet as $sheet) {
         $worksheetName = (string) $sheet->Name;
         //            echo '<b>Worksheet: ', $worksheetName,'</b><br />';
         if (isset($this->loadSheetsOnly) && !in_array($worksheetName, $this->loadSheetsOnly)) {
             continue;
         }
         $maxRow = $maxCol = 0;
         // Create new Worksheet
         $objPHPExcel->createSheet();
         $objPHPExcel->setActiveSheetIndex($worksheetID);
         //    Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in formula
         //        cells... during the load, all formulae should be correct, and we're simply bringing the worksheet
         //        name in line with the formula, not the reverse
         $objPHPExcel->getActiveSheet()->setTitle($worksheetName, false);
         if (!$this->readDataOnly && isset($sheet->PrintInformation)) {
             if (isset($sheet->PrintInformation->Margins)) {
                 foreach ($sheet->PrintInformation->Margins->children('gnm', true) as $key => $margin) {
                     $marginAttributes = $margin->attributes();
                     $marginSize = 72 / 100;
                     //    Default
                     switch ($marginAttributes['PrefUnit']) {
                         case 'mm':
                             $marginSize = intval($marginAttributes['Points']) / 100;
                             break;
                     }
                     switch ($key) {
                         case 'top':
                             $objPHPExcel->getActiveSheet()->getPageMargins()->setTop($marginSize);
                             break;
                         case 'bottom':
                             $objPHPExcel->getActiveSheet()->getPageMargins()->setBottom($marginSize);
                             break;
                         case 'left':
                             $objPHPExcel->getActiveSheet()->getPageMargins()->setLeft($marginSize);
                             break;
                         case 'right':
                             $objPHPExcel->getActiveSheet()->getPageMargins()->setRight($marginSize);
                             break;
                         case 'header':
                             $objPHPExcel->getActiveSheet()->getPageMargins()->setHeader($marginSize);
                             break;
                         case 'footer':
                             $objPHPExcel->getActiveSheet()->getPageMargins()->setFooter($marginSize);
                             break;
                     }
                 }
             }
         }
         foreach ($sheet->Cells->Cell as $cell) {
             $cellAttributes = $cell->attributes();
             $row = (int) $cellAttributes->Row + 1;
             $column = (int) $cellAttributes->Col;
             if ($row > $maxRow) {
                 $maxRow = $row;
             }
             if ($column > $maxCol) {
                 $maxCol = $column;
             }
             $column = \PHPExcel\Cell::stringFromColumnIndex($column);
             // Read cell?
             if ($this->getReadFilter() !== null) {
                 if (!$this->getReadFilter()->readCell($column, $row, $worksheetName)) {
                     continue;
                 }
             }
             $ValueType = $cellAttributes->ValueType;
             $ExprID = (string) $cellAttributes->ExprID;
             //                echo 'Cell ', $column, $row,'<br />';
             //                echo 'Type is ', $ValueType,'<br />';
             //                echo 'Value is ', $cell,'<br />';
             $type = \PHPExcel\Cell\DataType::TYPE_FORMULA;
             if ($ExprID > '') {
                 if ((string) $cell > '') {
                     $this->expressions[$ExprID] = array('column' => $cellAttributes->Col, 'row' => $cellAttributes->Row, 'formula' => (string) $cell);
                     //                        echo 'NEW EXPRESSION ', $ExprID,'<br />';
                 } else {
                     $expression = $this->expressions[$ExprID];
                     $cell = $this->referenceHelper->updateFormulaReferences($expression['formula'], 'A1', $cellAttributes->Col - $expression['column'], $cellAttributes->Row - $expression['row'], $worksheetName);
                     //                        echo 'SHARED EXPRESSION ', $ExprID,'<br />';
                     //                        echo 'New Value is ', $cell,'<br />';
                 }
                 $type = \PHPExcel\Cell\DataType::TYPE_FORMULA;
             } else {
                 switch ($ValueType) {
                     case '10':
                         //    NULL
                         $type = \PHPExcel\Cell\DataType::TYPE_NULL;
                         break;
                     case '20':
                         //    Boolean
                         $type = \PHPExcel\Cell\DataType::TYPE_BOOL;
                         $cell = $cell == 'TRUE' ? true : false;
                         break;
                     case '30':
                         //    Integer
                         $cell = intval($cell);
                         // Excel 2007+ doesn't differentiate between integer and float, so set the value and dropthru to the next (numeric) case
                     // Excel 2007+ doesn't differentiate between integer and float, so set the value and dropthru to the next (numeric) case
                     case '40':
                         //    Float
                         $type = \PHPExcel\Cell\DataType::TYPE_NUMERIC;
                         break;
                     case '50':
                         //    Error
                         $type = \PHPExcel\Cell\DataType::TYPE_ERROR;
                         break;
                     case '60':
                         //    String
                         $type = \PHPExcel\Cell\DataType::TYPE_STRING;
                         break;
                     case '70':
                         //    Cell Range
                     //    Cell Range
                     case '80':
                         //    Array
                 }
             }
             $objPHPExcel->getActiveSheet()->getCell($column . $row)->setValueExplicit($cell, $type);
         }
         if (!$this->readDataOnly && isset($sheet->Objects)) {
             foreach ($sheet->Objects->children('gnm', true) as $key => $comment) {
                 $commentAttributes = $comment->attributes();
                 //    Only comment objects are handled at the moment
                 if ($commentAttributes->Text) {
                     $objPHPExcel->getActiveSheet()->getComment((string) $commentAttributes->ObjectBound)->setAuthor((string) $commentAttributes->Author)->setText($this->parseRichText((string) $commentAttributes->Text));
                 }
             }
         }
         //            echo '$maxCol=', $maxCol,'; $maxRow=', $maxRow,'<br />';
         //
         foreach ($sheet->Styles->StyleRegion as $styleRegion) {
             $styleAttributes = $styleRegion->attributes();
             if ($styleAttributes['startRow'] <= $maxRow && $styleAttributes['startCol'] <= $maxCol) {
                 $startColumn = \PHPExcel\Cell::stringFromColumnIndex((int) $styleAttributes['startCol']);
                 $startRow = $styleAttributes['startRow'] + 1;
                 $endColumn = $styleAttributes['endCol'] > $maxCol ? $maxCol : (int) $styleAttributes['endCol'];
                 $endColumn = \PHPExcel\Cell::stringFromColumnIndex($endColumn);
                 $endRow = $styleAttributes['endRow'] > $maxRow ? $maxRow : $styleAttributes['endRow'];
                 $endRow += 1;
                 $cellRange = $startColumn . $startRow . ':' . $endColumn . $endRow;
                 //                    echo $cellRange,'<br />';
                 $styleAttributes = $styleRegion->Style->attributes();
                 //                    var_dump($styleAttributes);
                 //                    echo '<br />';
                 //    We still set the number format mask for date/time values, even if readDataOnly is true
                 if (!$this->readDataOnly || \PHPExcel\Shared\Date::isDateTimeFormatCode((string) $styleAttributes['Format'])) {
                     $styleArray = array();
                     $styleArray['numberformat']['code'] = (string) $styleAttributes['Format'];
                     //    If readDataOnly is false, we set all formatting information
                     if (!$this->readDataOnly) {
                         switch ($styleAttributes['HAlign']) {
                             case '1':
                                 $styleArray['alignment']['horizontal'] = \PHPExcel\Style\Alignment::HORIZONTAL_GENERAL;
                                 break;
                             case '2':
                                 $styleArray['alignment']['horizontal'] = \PHPExcel\Style\Alignment::HORIZONTAL_LEFT;
                                 break;
                             case '4':
                                 $styleArray['alignment']['horizontal'] = \PHPExcel\Style\Alignment::HORIZONTAL_RIGHT;
                                 break;
                             case '8':
                                 $styleArray['alignment']['horizontal'] = \PHPExcel\Style\Alignment::HORIZONTAL_CENTER;
                                 break;
                             case '16':
                             case '64':
                                 $styleArray['alignment']['horizontal'] = \PHPExcel\Style\Alignment::HORIZONTAL_CENTER_CONTINUOUS;
                                 break;
                             case '32':
                                 $styleArray['alignment']['horizontal'] = \PHPExcel\Style\Alignment::HORIZONTAL_JUSTIFY;
                                 break;
                         }
                         switch ($styleAttributes['VAlign']) {
                             case '1':
                                 $styleArray['alignment']['vertical'] = \PHPExcel\Style\Alignment::VERTICAL_TOP;
                                 break;
                             case '2':
                                 $styleArray['alignment']['vertical'] = \PHPExcel\Style\Alignment::VERTICAL_BOTTOM;
                                 break;
                             case '4':
                                 $styleArray['alignment']['vertical'] = \PHPExcel\Style\Alignment::VERTICAL_CENTER;
                                 break;
                             case '8':
                                 $styleArray['alignment']['vertical'] = \PHPExcel\Style\Alignment::VERTICAL_JUSTIFY;
                                 break;
                         }
                         $styleArray['alignment']['wrap'] = $styleAttributes['WrapText'] == '1' ? true : false;
                         $styleArray['alignment']['shrinkToFit'] = $styleAttributes['ShrinkToFit'] == '1' ? true : false;
                         $styleArray['alignment']['indent'] = intval($styleAttributes["Indent"]) > 0 ? $styleAttributes["indent"] : 0;
                         $RGB = self::parseGnumericColour($styleAttributes["Fore"]);
                         $styleArray['font']['color']['rgb'] = $RGB;
                         $RGB = self::parseGnumericColour($styleAttributes["Back"]);
                         $shade = $styleAttributes["Shade"];
                         if ($RGB != '000000' || $shade != '0') {
                             $styleArray['fill']['color']['rgb'] = $styleArray['fill']['startcolor']['rgb'] = $RGB;
                             $RGB2 = self::parseGnumericColour($styleAttributes["PatternColor"]);
                             $styleArray['fill']['endcolor']['rgb'] = $RGB2;
                             switch ($shade) {
                                 case '1':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_SOLID;
                                     break;
                                 case '2':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_GRADIENT_LINEAR;
                                     break;
                                 case '3':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_GRADIENT_PATH;
                                     break;
                                 case '4':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_DARKDOWN;
                                     break;
                                 case '5':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_DARKGRAY;
                                     break;
                                 case '6':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_DARKGRID;
                                     break;
                                 case '7':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_DARKHORIZONTAL;
                                     break;
                                 case '8':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_DARKTRELLIS;
                                     break;
                                 case '9':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_DARKUP;
                                     break;
                                 case '10':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_DARKVERTICAL;
                                     break;
                                 case '11':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_GRAY0625;
                                     break;
                                 case '12':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_GRAY125;
                                     break;
                                 case '13':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_LIGHTDOWN;
                                     break;
                                 case '14':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_LIGHTGRAY;
                                     break;
                                 case '15':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_LIGHTGRID;
                                     break;
                                 case '16':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_LIGHTHORIZONTAL;
                                     break;
                                 case '17':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_LIGHTTRELLIS;
                                     break;
                                 case '18':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_LIGHTUP;
                                     break;
                                 case '19':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_LIGHTVERTICAL;
                                     break;
                                 case '20':
                                     $styleArray['fill']['type'] = \PHPExcel\Style\Fill::FILL_PATTERN_MEDIUMGRAY;
                                     break;
                             }
                         }
                         $fontAttributes = $styleRegion->Style->Font->attributes();
                         //                            var_dump($fontAttributes);
                         //                            echo '<br />';
                         $styleArray['font']['name'] = (string) $styleRegion->Style->Font;
                         $styleArray['font']['size'] = intval($fontAttributes['Unit']);
                         $styleArray['font']['bold'] = $fontAttributes['Bold'] == '1' ? true : false;
                         $styleArray['font']['italic'] = $fontAttributes['Italic'] == '1' ? true : false;
                         $styleArray['font']['strike'] = $fontAttributes['StrikeThrough'] == '1' ? true : false;
                         switch ($fontAttributes['Underline']) {
                             case '1':
                                 $styleArray['font']['underline'] = \PHPExcel\Style\Font::UNDERLINE_SINGLE;
                                 break;
                             case '2':
                                 $styleArray['font']['underline'] = \PHPExcel\Style\Font::UNDERLINE_DOUBLE;
                                 break;
                             case '3':
                                 $styleArray['font']['underline'] = \PHPExcel\Style\Font::UNDERLINE_SINGLEACCOUNTING;
                                 break;
                             case '4':
                                 $styleArray['font']['underline'] = \PHPExcel\Style\Font::UNDERLINE_DOUBLEACCOUNTING;
                                 break;
                             default:
                                 $styleArray['font']['underline'] = \PHPExcel\Style\Font::UNDERLINE_NONE;
                                 break;
                         }
                         switch ($fontAttributes['Script']) {
                             case '1':
                                 $styleArray['font']['superScript'] = true;
                                 break;
                             case '-1':
                                 $styleArray['font']['subScript'] = true;
                                 break;
                         }
                         if (isset($styleRegion->Style->StyleBorder)) {
                             if (isset($styleRegion->Style->StyleBorder->Top)) {
                                 $styleArray['borders']['top'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->Top->attributes());
                             }
                             if (isset($styleRegion->Style->StyleBorder->Bottom)) {
                                 $styleArray['borders']['bottom'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->Bottom->attributes());
                             }
                             if (isset($styleRegion->Style->StyleBorder->Left)) {
                                 $styleArray['borders']['left'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->Left->attributes());
                             }
                             if (isset($styleRegion->Style->StyleBorder->Right)) {
                                 $styleArray['borders']['right'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->Right->attributes());
                             }
                             if (isset($styleRegion->Style->StyleBorder->Diagonal) && isset($styleRegion->Style->StyleBorder->{'Rev-Diagonal'})) {
                                 $styleArray['borders']['diagonal'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->Diagonal->attributes());
                                 $styleArray['borders']['diagonaldirection'] = \PHPExcel\Style\Borders::DIAGONAL_BOTH;
                             } elseif (isset($styleRegion->Style->StyleBorder->Diagonal)) {
                                 $styleArray['borders']['diagonal'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->Diagonal->attributes());
                                 $styleArray['borders']['diagonaldirection'] = \PHPExcel\Style\Borders::DIAGONAL_UP;
                             } elseif (isset($styleRegion->Style->StyleBorder->{'Rev-Diagonal'})) {
                                 $styleArray['borders']['diagonal'] = self::parseBorderAttributes($styleRegion->Style->StyleBorder->{'Rev-Diagonal'}->attributes());
                                 $styleArray['borders']['diagonaldirection'] = \PHPExcel\Style\Borders::DIAGONAL_DOWN;
                             }
                         }
                         if (isset($styleRegion->Style->HyperLink)) {
                             //    TO DO
                             $hyperlink = $styleRegion->Style->HyperLink->attributes();
                         }
                     }
                     //                        var_dump($styleArray);
                     //                        echo '<br />';
                     $objPHPExcel->getActiveSheet()->getStyle($cellRange)->applyFromArray($styleArray);
                 }
             }
         }
         if (!$this->readDataOnly && isset($sheet->Cols)) {
             //    Column Widths
             $columnAttributes = $sheet->Cols->attributes();
             $defaultWidth = $columnAttributes['DefaultSizePts'] / 5.4;
             $c = 0;
             foreach ($sheet->Cols->ColInfo as $columnOverride) {
                 $columnAttributes = $columnOverride->attributes();
                 $column = $columnAttributes['No'];
                 $columnWidth = $columnAttributes['Unit'] / 5.4;
                 $hidden = isset($columnAttributes['Hidden']) && $columnAttributes['Hidden'] == '1' ? true : false;
                 $columnCount = isset($columnAttributes['Count']) ? $columnAttributes['Count'] : 1;
                 while ($c < $column) {
                     $objPHPExcel->getActiveSheet()->getColumnDimension(\PHPExcel\Cell::stringFromColumnIndex($c))->setWidth($defaultWidth);
                     ++$c;
                 }
                 while ($c < $column + $columnCount && $c <= $maxCol) {
                     $objPHPExcel->getActiveSheet()->getColumnDimension(\PHPExcel\Cell::stringFromColumnIndex($c))->setWidth($columnWidth);
                     if ($hidden) {
                         $objPHPExcel->getActiveSheet()->getColumnDimension(\PHPExcel\Cell::stringFromColumnIndex($c))->setVisible(false);
                     }
                     ++$c;
                 }
             }
             while ($c <= $maxCol) {
                 $objPHPExcel->getActiveSheet()->getColumnDimension(\PHPExcel\Cell::stringFromColumnIndex($c))->setWidth($defaultWidth);
                 ++$c;
             }
         }
         if (!$this->readDataOnly && isset($sheet->Rows)) {
             //    Row Heights
             $rowAttributes = $sheet->Rows->attributes();
             $defaultHeight = $rowAttributes['DefaultSizePts'];
             $r = 0;
             foreach ($sheet->Rows->RowInfo as $rowOverride) {
                 $rowAttributes = $rowOverride->attributes();
                 $row = $rowAttributes['No'];
                 $rowHeight = $rowAttributes['Unit'];
                 $hidden = isset($rowAttributes['Hidden']) && $rowAttributes['Hidden'] == '1' ? true : false;
                 $rowCount = isset($rowAttributes['Count']) ? $rowAttributes['Count'] : 1;
                 while ($r < $row) {
                     ++$r;
                     $objPHPExcel->getActiveSheet()->getRowDimension($r)->setRowHeight($defaultHeight);
                 }
                 while ($r < $row + $rowCount && $r < $maxRow) {
                     ++$r;
                     $objPHPExcel->getActiveSheet()->getRowDimension($r)->setRowHeight($rowHeight);
                     if ($hidden) {
                         $objPHPExcel->getActiveSheet()->getRowDimension($r)->setVisible(false);
                     }
                 }
             }
             while ($r < $maxRow) {
                 ++$r;
                 $objPHPExcel->getActiveSheet()->getRowDimension($r)->setRowHeight($defaultHeight);
             }
         }
         //    Handle Merged Cells in this worksheet
         if (isset($sheet->MergedRegions)) {
             foreach ($sheet->MergedRegions->Merge as $mergeCells) {
                 if (strpos($mergeCells, ':') !== false) {
                     $objPHPExcel->getActiveSheet()->mergeCells($mergeCells);
                 }
             }
         }
         $worksheetID++;
     }
     //    Loop through definedNames (global named ranges)
     if (isset($gnmXML->Names)) {
         foreach ($gnmXML->Names->Name as $namedRange) {
             $name = (string) $namedRange->name;
             $range = (string) $namedRange->value;
             if (stripos($range, '#REF!') !== false) {
                 continue;
             }
             $range = explode('!', $range);
             $range[0] = trim($range[0], "'");
             if ($worksheet = $objPHPExcel->getSheetByName($range[0])) {
                 $extractedRange = str_replace('$', '', $range[1]);
                 $objPHPExcel->addNamedRange(new \PHPExcel\NamedRange($name, $worksheet, $extractedRange));
             }
         }
     }
     // Return
     return $objPHPExcel;
 }