/** * Get cell at a specific coordinate * * @param string $pCoordinate Coordinate of the cell * @throws Exception * @return PHPExcel_Cell Cell that was found */ public function getCell($pCoordinate = 'A1') { // Check cell collection if ($this->_cellCollection->isDataSet($pCoordinate)) { return $this->_cellCollection->getCacheData($pCoordinate); } // Worksheet reference? if (strpos($pCoordinate, '!') !== false) { $worksheetReference = PHPExcel_Worksheet::extractSheetTitle($pCoordinate, true); return $this->getParent()->getSheetByName($worksheetReference[0])->getCell($worksheetReference[1]); } // Named range? if (!preg_match('/^' . PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF . '$/i', $pCoordinate, $matches) && preg_match('/^' . PHPExcel_Calculation::CALCULATION_REGEXP_NAMEDRANGE . '$/i', $pCoordinate, $matches)) { $namedRange = PHPExcel_NamedRange::resolveRange($pCoordinate, $this); if (!is_null($namedRange)) { $pCoordinate = $namedRange->getRange(); return $namedRange->getWorksheet()->getCell($pCoordinate); } } // Uppercase coordinate $pCoordinate = strtoupper($pCoordinate); if (strpos($pCoordinate, ':') !== false || strpos($pCoordinate, ',') !== false) { throw new Exception('Cell coordinate can not be a range of cells.'); } elseif (strpos($pCoordinate, '$') !== false) { throw new Exception('Cell coordinate must not be absolute.'); } else { // Create new cell object // Coordinates $aCoordinates = PHPExcel_Cell::coordinateFromString($pCoordinate); // $cell = $this->_cellCollection->addCacheData($pCoordinate,new PHPExcel_Cell($aCoordinates[0], $aCoordinates[1], null, PHPExcel_Cell_DataType::TYPE_NULL, $this)); $cell = new PHPExcel_Cell($aCoordinates[0], $aCoordinates[1], null, PHPExcel_Cell_DataType::TYPE_NULL, $this); $this->_cellCollectionIsSorted = false; if (PHPExcel_Cell::columnIndexFromString($this->_cachedHighestColumn) < PHPExcel_Cell::columnIndexFromString($aCoordinates[0])) { $this->_cachedHighestColumn = $aCoordinates[0]; } if ($this->_cachedHighestRow < $aCoordinates[1]) { $this->_cachedHighestRow = $aCoordinates[1]; } // Cell needs appropriate xfIndex $rowDimensions = $this->getRowDimensions(); $columnDimensions = $this->getColumnDimensions(); if (isset($rowDimensions[$aCoordinates[1]]) && $rowDimensions[$aCoordinates[1]]->getXfIndex() !== null) { // then there is a row dimension with explicit style, assign it to the cell $cell->setXfIndex($rowDimensions[$aCoordinates[1]]->getXfIndex()); } else { if (isset($columnDimensions[$aCoordinates[0]])) { // then there is a column dimension, assign it to the cell $cell->setXfIndex($columnDimensions[$aCoordinates[0]]->getXfIndex()); } else { // set to default index $cell->setXfIndex(0); } } return $cell; } }