Example #1
0
 /**
  * Duplicate cell style to a range of cells
  *
  * Please note that this will overwrite existing cell styles for cells in range!
  *
  * @param PHPExcel_Style $pCellStyle Cell style to duplicate
  * @param string $pRange Range of cells (i.e. "A1:B10"), or just one cell (i.e. "A1")
  * @throws PHPExcel_Exception
  * @return PHPExcel_Worksheet
  */
 public function duplicateStyle(PHPExcel_Style $pCellStyle = null, $pRange = '')
 {
     // make sure we have a real style and not supervisor
     $style = $pCellStyle->getIsSupervisor() ? $pCellStyle->getSharedComponent() : $pCellStyle;
     // Add the style to the workbook if necessary
     $workbook = $this->_parent;
     if ($existingStyle = $this->_parent->getCellXfByHashCode($pCellStyle->getHashCode())) {
         // there is already such cell Xf in our collection
         $xfIndex = $existingStyle->getIndex();
     } else {
         // we don't have such a cell Xf, need to add
         $workbook->addCellXf($pCellStyle);
         $xfIndex = $pCellStyle->getIndex();
     }
     // Calculate range outer borders
     list($rangeStart, $rangeEnd) = PHPExcel_Cell::rangeBoundaries($pRange . ':' . $pRange);
     // Make sure we can loop upwards on rows and columns
     if ($rangeStart[0] > $rangeEnd[0] && $rangeStart[1] > $rangeEnd[1]) {
         $tmp = $rangeStart;
         $rangeStart = $rangeEnd;
         $rangeEnd = $tmp;
     }
     // Loop through cells and apply styles
     for ($col = $rangeStart[0]; $col <= $rangeEnd[0]; ++$col) {
         for ($row = $rangeStart[1]; $row <= $rangeEnd[1]; ++$row) {
             $this->getCell(PHPExcel_Cell::stringFromColumnIndex($col - 1) . $row)->setXfIndex($xfIndex);
         }
     }
     return $this;
 }
Example #2
0
	/**
	 * Duplicate cell style to a range of cells
	 *
	 * Please note that this will overwrite existing cell styles for cells in
	 * range!
	 *
	 * @param PHPExcel_Style $pCellStyle
	 *        	to duplicate
	 * @param string $pRange
	 *        	cells (i.e. "A1:B10"), or just one cell (i.e. "A1")
	 * @throws Exception
	 * @return PHPExcel_Worksheet
	 */
	public function duplicateStyle(PHPExcel_Style $pCellStyle = null, $pRange = '') {
		// make sure we have a real style and not supervisor
		$style = $pCellStyle->getIsSupervisor () ? $pCellStyle->getSharedComponent () : $pCellStyle;
		
		// Add the style to the workbook if necessary
		$workbook = $this->_parent;
		if ($existingStyle = $this->_parent->getCellXfByHashCode ( $pCellStyle->getHashCode () )) {
			// there is already such cell Xf in our collection
			$xfIndex = $existingStyle->getIndex ();
		} else {
			// we don't have such a cell Xf, need to add
			$workbook->addCellXf ( $pCellStyle );
			$xfIndex = $pCellStyle->getIndex ();
		}
		
		// Uppercase coordinate
		$pRange = strtoupper ( $pRange );
		
		// Is it a cell range or a single cell?
		$rangeA = '';
		$rangeB = '';
		if (strpos ( $pRange, ':' ) === false) {
			$rangeA = $pRange;
			$rangeB = $pRange;
		} else {
			list ( $rangeA, $rangeB ) = explode ( ':', $pRange );
		}
		
		// Calculate range outer borders
		$rangeStart = PHPExcel_Cell::coordinateFromString ( $rangeA );
		$rangeEnd = PHPExcel_Cell::coordinateFromString ( $rangeB );
		
		// Translate column into index
		$rangeStart [0] = PHPExcel_Cell::columnIndexFromString ( $rangeStart [0] ) - 1;
		$rangeEnd [0] = PHPExcel_Cell::columnIndexFromString ( $rangeEnd [0] ) - 1;
		
		// Make sure we can loop upwards on rows and columns
		if ($rangeStart [0] > $rangeEnd [0] && $rangeStart [1] > $rangeEnd [1]) {
			$tmp = $rangeStart;
			$rangeStart = $rangeEnd;
			$rangeEnd = $tmp;
		}
		
		// Loop through cells and apply styles
		for($col = $rangeStart [0]; $col <= $rangeEnd [0]; ++ $col) {
			for($row = $rangeStart [1]; $row <= $rangeEnd [1]; ++ $row) {
				$this->getCell ( PHPExcel_Cell::stringFromColumnIndex ( $col ) . $row )->setXfIndex ( $xfIndex );
			}
		}
		
		return $this;
	}