/** * Set title * * @param string $pValue String containing the dimension of this worksheet * @param string $updateFormulaCellReferences boolean Flag indicating whether cell references in formulae should * be updated to reflect the new sheet name. * This should be left as the default true, unless you are * certain that no formula cells on any worksheet contain * references to this worksheet * @return PHPExcel_Worksheet */ public function setTitle($pValue = 'Worksheet', $updateFormulaCellReferences = true) { // Is this a 'rename' or not? if ($this->getTitle() == $pValue) { return $this; } // Syntax check self::_checkSheetTitle($pValue); // Old title $oldTitle = $this->getTitle(); if ($this->_parent) { // Is there already such sheet name? if ($this->_parent->sheetNameExists($pValue)) { // Use name, but append with lowest possible integer if (PHPExcel_Shared_String::CountCharacters($pValue) > 29) { $pValue = PHPExcel_Shared_String::Substring($pValue,0,29); } $i = 1; while ($this->_parent->sheetNameExists($pValue . ' ' . $i)) { ++$i; if ($i == 10) { if (PHPExcel_Shared_String::CountCharacters($pValue) > 28) { $pValue = PHPExcel_Shared_String::Substring($pValue,0,28); } } elseif ($i == 100) { if (PHPExcel_Shared_String::CountCharacters($pValue) > 27) { $pValue = PHPExcel_Shared_String::Substring($pValue,0,27); } } } $altTitle = $pValue . ' ' . $i; return $this->setTitle($altTitle,$updateFormulaCellReferences); } } // Set title $this->_title = $pValue; $this->_dirty = true; if ($this->_parent) { // New title $newTitle = $this->getTitle(); PHPExcel_Calculation::getInstance($this->_parent) ->renameCalculationCacheForWorksheet($oldTitle, $newTitle); if ($updateFormulaCellReferences) PHPExcel_ReferenceHelper::getInstance()->updateNamedFormulas($this->_parent, $oldTitle, $newTitle); } return $this; }
/** * Gets a sheet by a loose name match unless * exactMatch is true. Returns a PHPExcel_Worksheet object * if a match is found, false if no match. * @param $name * @param bool|false $exactMatch * @return bool|\PHPExcel_Worksheet */ private function getSheetByName($name, $exactMatch = false) { if ($exactMatch === false) { $name = strtolower($name); // determine a case insensitive match foreach ($this->workbook->getSheetNames() as $sheet) { if (strtolower($sheet) === $name) { $use = $sheet; break; } } if (!isset($use)) { return false; } $this->worksheet = $this->workbook->getSheetByName($use); } else { if ($this->workbook->sheetNameExists($name)) { $this->worksheet = $this->workbook->getSheetByName($name); } else { return false; } } return $this->worksheet; }