See Release Notes
Long Term Support Release
<?php namespace PhpOffice\PhpSpreadsheet\Style; use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException; class Alignment extends Supervisor { // Horizontal alignment styles const HORIZONTAL_GENERAL = 'general'; const HORIZONTAL_LEFT = 'left'; const HORIZONTAL_RIGHT = 'right'; const HORIZONTAL_CENTER = 'center'; const HORIZONTAL_CENTER_CONTINUOUS = 'centerContinuous'; const HORIZONTAL_JUSTIFY = 'justify'; const HORIZONTAL_FILL = 'fill'; const HORIZONTAL_DISTRIBUTED = 'distributed'; // Excel2007 only> private const HORIZONTAL_CENTER_CONTINUOUS_LC = 'centercontinuous'; > // Mapping for horizontal alignment // Vertical alignment styles > const HORIZONTAL_ALIGNMENT_FOR_XLSX = [ const VERTICAL_BOTTOM = 'bottom'; > self::HORIZONTAL_LEFT => self::HORIZONTAL_LEFT, const VERTICAL_TOP = 'top'; > self::HORIZONTAL_RIGHT => self::HORIZONTAL_RIGHT, const VERTICAL_CENTER = 'center'; > self::HORIZONTAL_CENTER => self::HORIZONTAL_CENTER, const VERTICAL_JUSTIFY = 'justify'; > self::HORIZONTAL_CENTER_CONTINUOUS => self::HORIZONTAL_CENTER_CONTINUOUS, const VERTICAL_DISTRIBUTED = 'distributed'; // Excel2007 only > self::HORIZONTAL_JUSTIFY => self::HORIZONTAL_JUSTIFY, > self::HORIZONTAL_FILL => self::HORIZONTAL_FILL, // Read order > self::HORIZONTAL_DISTRIBUTED => self::HORIZONTAL_DISTRIBUTED, const READORDER_CONTEXT = 0; > ]; const READORDER_LTR = 1; > // Mapping for horizontal alignment CSS const READORDER_RTL = 2; > const HORIZONTAL_ALIGNMENT_FOR_HTML = [ > self::HORIZONTAL_LEFT => self::HORIZONTAL_LEFT, /** > self::HORIZONTAL_RIGHT => self::HORIZONTAL_RIGHT, * Horizontal alignment. > self::HORIZONTAL_CENTER => self::HORIZONTAL_CENTER, * > self::HORIZONTAL_CENTER_CONTINUOUS => self::HORIZONTAL_CENTER, * @var string > self::HORIZONTAL_JUSTIFY => self::HORIZONTAL_JUSTIFY, */ > //self::HORIZONTAL_FILL => self::HORIZONTAL_FILL, // no reasonable equivalent for fill protected $horizontal = self::HORIZONTAL_GENERAL; > self::HORIZONTAL_DISTRIBUTED => self::HORIZONTAL_JUSTIFY, > ];/**> // Vertical alignment CSS * Vertical alignment. > private const VERTICAL_BASELINE = 'baseline'; * > private const VERTICAL_MIDDLE = 'middle'; * @var string > private const VERTICAL_SUB = 'sub'; */ > private const VERTICAL_SUPER = 'super'; protected $vertical = self::VERTICAL_BOTTOM; > private const VERTICAL_TEXT_BOTTOM = 'text-bottom'; > private const VERTICAL_TEXT_TOP = 'text-top'; /** > * Text rotation. > // Mapping for vertical alignment * > const VERTICAL_ALIGNMENT_FOR_XLSX = [ * @var int > self::VERTICAL_BOTTOM => self::VERTICAL_BOTTOM, */ > self::VERTICAL_TOP => self::VERTICAL_TOP, protected $textRotation = 0; > self::VERTICAL_CENTER => self::VERTICAL_CENTER, > self::VERTICAL_JUSTIFY => self::VERTICAL_JUSTIFY, /** > self::VERTICAL_DISTRIBUTED => self::VERTICAL_DISTRIBUTED, * Wrap text. > // css settings that arent't in sync with Excel * > self::VERTICAL_BASELINE => self::VERTICAL_BOTTOM, * @var bool > self::VERTICAL_MIDDLE => self::VERTICAL_CENTER, */ > self::VERTICAL_SUB => self::VERTICAL_BOTTOM, protected $wrapText = false; > self::VERTICAL_SUPER => self::VERTICAL_TOP, > self::VERTICAL_TEXT_BOTTOM => self::VERTICAL_BOTTOM, /** > self::VERTICAL_TEXT_TOP => self::VERTICAL_TOP, * Shrink to fit. > ]; * > * @var bool > // Mapping for vertical alignment for Html */ > const VERTICAL_ALIGNMENT_FOR_HTML = [ protected $shrinkToFit = false; > self::VERTICAL_BOTTOM => self::VERTICAL_BOTTOM, > self::VERTICAL_TOP => self::VERTICAL_TOP, /** > self::VERTICAL_CENTER => self::VERTICAL_MIDDLE, * Indent - only possible with horizontal alignment left and right. > self::VERTICAL_JUSTIFY => self::VERTICAL_MIDDLE, * > self::VERTICAL_DISTRIBUTED => self::VERTICAL_MIDDLE, * @var int > // css settings that arent't in sync with Excel */ > self::VERTICAL_BASELINE => self::VERTICAL_BASELINE, protected $indent = 0; > self::VERTICAL_MIDDLE => self::VERTICAL_MIDDLE, > self::VERTICAL_SUB => self::VERTICAL_SUB, /** > self::VERTICAL_SUPER => self::VERTICAL_SUPER, * Read order. > self::VERTICAL_TEXT_BOTTOM => self::VERTICAL_TEXT_BOTTOM, * > self::VERTICAL_TEXT_TOP => self::VERTICAL_TEXT_TOP, * @var int > ];*/> // Special value for Text Rotation protected $readOrder = 0; > const TEXTROTATION_STACK_EXCEL = 255; > const TEXTROTATION_STACK_PHPSPREADSHEET = -165; // 90 - 255 /** >< * @var string> * @var null|string< * @var string> * @var null|string< * @var int> * @var null|int* Leave this value at default unless you understand exactly what * its ramifications are * @param bool $isConditional Flag indicating if this is a conditional style or not * Leave this value at default unless you understand exactly what * its ramifications are */ public function __construct($isSupervisor = false, $isConditional = false) { // Supervisor? parent::__construct($isSupervisor); if ($isConditional) { $this->horizontal = null; $this->vertical = null; $this->textRotation = null; } } /** * Get the shared style component for the currently active cell in currently active sheet. * Only used for style supervisor. * * @return Alignment */ public function getSharedComponent() {< return $this->parent->getSharedComponent()->getAlignment();> /** @var Style */ > $parent = $this->parent; > > return $parent->getSharedComponent()->getAlignment();} /** * Build style array from subcomponents. * * @param array $array * * @return array */ public function getStyleArray($array) { return ['alignment' => $array]; } /** * Apply styles from array. * * <code> * $spreadsheet->getActiveSheet()->getStyle('B2')->getAlignment()->applyFromArray( * [ * 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, * 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER, * 'textRotation' => 0, * 'wrapText' => TRUE * ] * ); * </code> *< * @param array $pStyles Array containing style information> * @param array $styleArray Array containing style information*< * @throws PhpSpreadsheetException < * < * @return Alignment> * @return $this*/< public function applyFromArray(array $pStyles)> public function applyFromArray(array $styleArray){ if ($this->isSupervisor) { $this->getActiveSheet()->getStyle($this->getSelectedCells())< ->applyFromArray($this->getStyleArray($pStyles));> ->applyFromArray($this->getStyleArray($styleArray));} else {< if (isset($pStyles['horizontal'])) { < $this->setHorizontal($pStyles['horizontal']);> if (isset($styleArray['horizontal'])) { > $this->setHorizontal($styleArray['horizontal']);}< if (isset($pStyles['vertical'])) { < $this->setVertical($pStyles['vertical']);> if (isset($styleArray['vertical'])) { > $this->setVertical($styleArray['vertical']);}< if (isset($pStyles['textRotation'])) { < $this->setTextRotation($pStyles['textRotation']);> if (isset($styleArray['textRotation'])) { > $this->setTextRotation($styleArray['textRotation']);}< if (isset($pStyles['wrapText'])) { < $this->setWrapText($pStyles['wrapText']);> if (isset($styleArray['wrapText'])) { > $this->setWrapText($styleArray['wrapText']);}< if (isset($pStyles['shrinkToFit'])) { < $this->setShrinkToFit($pStyles['shrinkToFit']);> if (isset($styleArray['shrinkToFit'])) { > $this->setShrinkToFit($styleArray['shrinkToFit']);}< if (isset($pStyles['indent'])) { < $this->setIndent($pStyles['indent']);> if (isset($styleArray['indent'])) { > $this->setIndent($styleArray['indent']);}< if (isset($pStyles['readOrder'])) { < $this->setReadOrder($pStyles['readOrder']);> if (isset($styleArray['readOrder'])) { > $this->setReadOrder($styleArray['readOrder']);} } return $this; } /** * Get Horizontal. *< * @return string> * @return null|string*/ public function getHorizontal() { if ($this->isSupervisor) { return $this->getSharedComponent()->getHorizontal(); } return $this->horizontal; } /** * Set Horizontal. *< * @param string $pValue see self::HORIZONTAL_*> * @param string $horizontalAlignment see self::HORIZONTAL_**< * @return Alignment> * @return $this*/< public function setHorizontal($pValue)> public function setHorizontal(string $horizontalAlignment){< if ($pValue == '') { < $pValue = self::HORIZONTAL_GENERAL;> $horizontalAlignment = strtolower($horizontalAlignment); > if ($horizontalAlignment === self::HORIZONTAL_CENTER_CONTINUOUS_LC) { > $horizontalAlignment = self::HORIZONTAL_CENTER_CONTINUOUS;} if ($this->isSupervisor) {< $styleArray = $this->getStyleArray(['horizontal' => $pValue]);> $styleArray = $this->getStyleArray(['horizontal' => $horizontalAlignment]);$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); } else {< $this->horizontal = $pValue;> $this->horizontal = $horizontalAlignment;} return $this; } /** * Get Vertical. *< * @return string> * @return null|string*/ public function getVertical() { if ($this->isSupervisor) { return $this->getSharedComponent()->getVertical(); } return $this->vertical; } /** * Set Vertical. *< * @param string $pValue see self::VERTICAL_*> * @param string $verticalAlignment see self::VERTICAL_**< * @return Alignment> * @return $this*/< public function setVertical($pValue)> public function setVertical($verticalAlignment){< if ($pValue == '') { < $pValue = self::VERTICAL_BOTTOM; < }> $verticalAlignment = strtolower($verticalAlignment);if ($this->isSupervisor) {< $styleArray = $this->getStyleArray(['vertical' => $pValue]);> $styleArray = $this->getStyleArray(['vertical' => $verticalAlignment]);$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); } else {< $this->vertical = $pValue;> $this->vertical = $verticalAlignment;} return $this; } /** * Get TextRotation. *< * @return int> * @return null|int*/ public function getTextRotation() { if ($this->isSupervisor) { return $this->getSharedComponent()->getTextRotation(); } return $this->textRotation; } /** * Set TextRotation. *< * @param int $pValue < * < * @throws PhpSpreadsheetException> * @param int $angleInDegrees*< * @return Alignment> * @return $this*/< public function setTextRotation($pValue)> public function setTextRotation($angleInDegrees){ // Excel2007 value 255 => PhpSpreadsheet value -165< if ($pValue == 255) { < $pValue = -165;> if ($angleInDegrees == self::TEXTROTATION_STACK_EXCEL) { > $angleInDegrees = self::TEXTROTATION_STACK_PHPSPREADSHEET;} // Set rotation< if (($pValue >= -90 && $pValue <= 90) || $pValue == -165) {> if (($angleInDegrees >= -90 && $angleInDegrees <= 90) || $angleInDegrees == self::TEXTROTATION_STACK_PHPSPREADSHEET) {if ($this->isSupervisor) {< $styleArray = $this->getStyleArray(['textRotation' => $pValue]);> $styleArray = $this->getStyleArray(['textRotation' => $angleInDegrees]);$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); } else {< $this->textRotation = $pValue;> $this->textRotation = $angleInDegrees;} } else { throw new PhpSpreadsheetException('Text rotation should be a value between -90 and 90.'); } return $this; } /** * Get Wrap Text. * * @return bool */ public function getWrapText() { if ($this->isSupervisor) { return $this->getSharedComponent()->getWrapText(); } return $this->wrapText; } /** * Set Wrap Text. *< * @param bool $pValue> * @param bool $wrapped*< * @return Alignment> * @return $this*/< public function setWrapText($pValue)> public function setWrapText($wrapped){< if ($pValue == '') { < $pValue = false;> if ($wrapped == '') { > $wrapped = false;} if ($this->isSupervisor) {< $styleArray = $this->getStyleArray(['wrapText' => $pValue]);> $styleArray = $this->getStyleArray(['wrapText' => $wrapped]);$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); } else {< $this->wrapText = $pValue;> $this->wrapText = $wrapped;} return $this; } /** * Get Shrink to fit. * * @return bool */ public function getShrinkToFit() { if ($this->isSupervisor) { return $this->getSharedComponent()->getShrinkToFit(); } return $this->shrinkToFit; } /** * Set Shrink to fit. *< * @param bool $pValue> * @param bool $shrink*< * @return Alignment> * @return $this*/< public function setShrinkToFit($pValue)> public function setShrinkToFit($shrink){< if ($pValue == '') { < $pValue = false;> if ($shrink == '') { > $shrink = false;} if ($this->isSupervisor) {< $styleArray = $this->getStyleArray(['shrinkToFit' => $pValue]);> $styleArray = $this->getStyleArray(['shrinkToFit' => $shrink]);$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); } else {< $this->shrinkToFit = $pValue;> $this->shrinkToFit = $shrink;} return $this; } /** * Get indent. * * @return int */ public function getIndent() { if ($this->isSupervisor) { return $this->getSharedComponent()->getIndent(); } return $this->indent; } /** * Set indent. *< * @param int $pValue> * @param int $indent*< * @return Alignment> * @return $this*/< public function setIndent($pValue)> public function setIndent($indent){< if ($pValue > 0) { < if ($this->getHorizontal() != self::HORIZONTAL_GENERAL &&> if ($indent > 0) { > if ( > $this->getHorizontal() != self::HORIZONTAL_GENERAL &&$this->getHorizontal() != self::HORIZONTAL_LEFT &&< $this->getHorizontal() != self::HORIZONTAL_RIGHT) { < $pValue = 0; // indent not supported> $this->getHorizontal() != self::HORIZONTAL_RIGHT && > $this->getHorizontal() != self::HORIZONTAL_DISTRIBUTED > ) { > $indent = 0; // indent not supported} } if ($this->isSupervisor) {< $styleArray = $this->getStyleArray(['indent' => $pValue]);> $styleArray = $this->getStyleArray(['indent' => $indent]);$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); } else {< $this->indent = $pValue;> $this->indent = $indent;} return $this; } /** * Get read order. * * @return int */ public function getReadOrder() { if ($this->isSupervisor) { return $this->getSharedComponent()->getReadOrder(); } return $this->readOrder; } /** * Set read order. *< * @param int $pValue> * @param int $readOrder*< * @return Alignment> * @return $this*/< public function setReadOrder($pValue)> public function setReadOrder($readOrder){< if ($pValue < 0 || $pValue > 2) { < $pValue = 0;> if ($readOrder < 0 || $readOrder > 2) { > $readOrder = 0;} if ($this->isSupervisor) {< $styleArray = $this->getStyleArray(['readOrder' => $pValue]);> $styleArray = $this->getStyleArray(['readOrder' => $readOrder]);$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); } else {< $this->readOrder = $pValue;> $this->readOrder = $readOrder;} return $this; } /** * Get hash code. * * @return string Hash code */ public function getHashCode() { if ($this->isSupervisor) { return $this->getSharedComponent()->getHashCode(); } return md5( $this->horizontal . $this->vertical . $this->textRotation . ($this->wrapText ? 't' : 'f') . ($this->shrinkToFit ? 't' : 'f') . $this->indent . $this->readOrder . __CLASS__ );> } } > } > protected function exportArray1(): array > { > $exportedArray = []; > $this->exportArray2($exportedArray, 'horizontal', $this->getHorizontal()); > $this->exportArray2($exportedArray, 'indent', $this->getIndent()); > $this->exportArray2($exportedArray, 'readOrder', $this->getReadOrder()); > $this->exportArray2($exportedArray, 'shrinkToFit', $this->getShrinkToFit()); > $this->exportArray2($exportedArray, 'textRotation', $this->getTextRotation()); > $this->exportArray2($exportedArray, 'vertical', $this->getVertical()); > $this->exportArray2($exportedArray, 'wrapText', $this->getWrapText()); > > return $exportedArray;