Add exportArray Method for Styles (#1580)
Issue #580 has gone stale since I started work on this. Nevertheless, this implements an exportArray function as an exact counterpart of applyFromArry. I chose the name exportArray to avoid confusion with the existing method getStyleArray, which does something completely different. This change also increases coverage for all the Style classes to 100%, with the exception of Style.php itself. There were several (unchanged) places in Style.php where I did not have sufficient understanding of what was supposed to be happening, so could not create tests. All properties used by applyFromArray are exported by this method. Note that conditional styles are not covered; this is consistent with the fact that they are not covered by applyFromArray. The method is implemented as a final public function in Style/Supervisor, which calls abstract protected function exportArray1, which is implemented in each of the subclasses, and which calls final protected function exportArray2 in Style/Supervisor. So exportArray is usable for any of the subclasses as well. The new method is added to the documentation. The existing documentation for applyFromArray was alphabetized to make it easier to follow. One property (Style quotePrefix) was added to the documentation. Some Borders pseudo-properties (vertical, horizontal, and outline) were documented as usable by applyFromArray, but aren't actually supported - they were removed. The documentation of the properties seemed to use setProperty and getProperty fairly randomly - it now uses setProperty exclusively. New constants were added for the textRotation "angles" used to create a "stacked" cell. I felt that changing the readers and writers to use these constants was beyond the scope of this change, but it is on my to-do list.
This commit is contained in:
parent
cc209d0b43
commit
ae0cd46423
|
@ -587,6 +587,13 @@ execution whenever you are setting more than one style property. But the
|
||||||
difference may barely be measurable unless you have many different
|
difference may barely be measurable unless you have many different
|
||||||
styles in your workbook.
|
styles in your workbook.
|
||||||
|
|
||||||
|
You can perform the opposite function, exporting a Style as an array,
|
||||||
|
as follows:
|
||||||
|
|
||||||
|
``` php
|
||||||
|
$styleArray = $spreadsheet->getActiveSheet()->getStyle('A3')->exportArray();
|
||||||
|
```
|
||||||
|
|
||||||
### Number formats
|
### Number formats
|
||||||
|
|
||||||
You often want to format numbers in Excel. For example you may want a
|
You often want to format numbers in Excel. For example you may want a
|
||||||
|
@ -753,69 +760,74 @@ another style array.
|
||||||
|
|
||||||
Array key | Maps to property
|
Array key | Maps to property
|
||||||
-------------|-------------------
|
-------------|-------------------
|
||||||
fill | getFill()
|
alignment | setAlignment()
|
||||||
font | getFont()
|
borders | setBorders()
|
||||||
borders | getBorders()
|
fill | setFill()
|
||||||
alignment | getAlignment()
|
font | setFont()
|
||||||
numberFormat | getNumberFormat()
|
numberFormat | setNumberFormat()
|
||||||
protection | getProtection()
|
protection | setProtection()
|
||||||
|
quotePrefix | setQuotePrefix()
|
||||||
**\PhpOffice\PhpSpreadsheet\Style\Fill**
|
|
||||||
|
|
||||||
Array key | Maps to property
|
|
||||||
-----------|-------------------
|
|
||||||
fillType | setFillType()
|
|
||||||
rotation | setRotation()
|
|
||||||
startColor | getStartColor()
|
|
||||||
endColor | getEndColor()
|
|
||||||
color | getStartColor()
|
|
||||||
|
|
||||||
**\PhpOffice\PhpSpreadsheet\Style\Font**
|
|
||||||
|
|
||||||
Array key | Maps to property
|
|
||||||
------------|-------------------
|
|
||||||
name | setName()
|
|
||||||
bold | setBold()
|
|
||||||
italic | setItalic()
|
|
||||||
underline | setUnderline()
|
|
||||||
strikethrough | setStrikethrough()
|
|
||||||
color | getColor()
|
|
||||||
size | setSize()
|
|
||||||
superscript | setSuperscript()
|
|
||||||
subscript | setSubscript()
|
|
||||||
|
|
||||||
**\PhpOffice\PhpSpreadsheet\Style\Borders**
|
|
||||||
|
|
||||||
Array key | Maps to property
|
|
||||||
------------------|-------------------
|
|
||||||
allBorders | getLeft(); getRight(); getTop(); getBottom()
|
|
||||||
left | getLeft()
|
|
||||||
right | getRight()
|
|
||||||
top | getTop()
|
|
||||||
bottom | getBottom()
|
|
||||||
diagonal | getDiagonal()
|
|
||||||
vertical | getVertical()
|
|
||||||
horizontal | getHorizontal()
|
|
||||||
diagonalDirection | setDiagonalDirection()
|
|
||||||
outline | setOutline()
|
|
||||||
|
|
||||||
**\PhpOffice\PhpSpreadsheet\Style\Border**
|
|
||||||
|
|
||||||
Array key | Maps to property
|
|
||||||
------------|-------------------
|
|
||||||
borderStyle | setBorderStyle()
|
|
||||||
color | getColor()
|
|
||||||
|
|
||||||
**\PhpOffice\PhpSpreadsheet\Style\Alignment**
|
**\PhpOffice\PhpSpreadsheet\Style\Alignment**
|
||||||
|
|
||||||
Array key | Maps to property
|
Array key | Maps to property
|
||||||
------------|-------------------
|
------------|-------------------
|
||||||
horizontal | setHorizontal()
|
horizontal | setHorizontal()
|
||||||
vertical | setVertical()
|
|
||||||
textRotation| setTextRotation()
|
|
||||||
wrapText | setWrapText()
|
|
||||||
shrinkToFit | setShrinkToFit()
|
|
||||||
indent | setIndent()
|
indent | setIndent()
|
||||||
|
readOrder | setReadOrder()
|
||||||
|
shrinkToFit | setShrinkToFit()
|
||||||
|
textRotation| setTextRotation()
|
||||||
|
vertical | setVertical()
|
||||||
|
wrapText | setWrapText()
|
||||||
|
|
||||||
|
**\PhpOffice\PhpSpreadsheet\Style\Border**
|
||||||
|
|
||||||
|
Array key | Maps to property
|
||||||
|
------------|-------------------
|
||||||
|
borderStyle | setBorderStyle()
|
||||||
|
color | setColor()
|
||||||
|
|
||||||
|
**\PhpOffice\PhpSpreadsheet\Style\Borders**
|
||||||
|
|
||||||
|
Array key | Maps to property
|
||||||
|
------------------|-------------------
|
||||||
|
allBorders | setLeft(); setRight(); setTop(); setBottom()
|
||||||
|
bottom | setBottom()
|
||||||
|
diagonal | setDiagonal()
|
||||||
|
diagonalDirection | setDiagonalDirection()
|
||||||
|
left | setLeft()
|
||||||
|
right | setRight()
|
||||||
|
top | setTop()
|
||||||
|
|
||||||
|
**\PhpOffice\PhpSpreadsheet\Style\Color**
|
||||||
|
|
||||||
|
Array key | Maps to property
|
||||||
|
------------|-------------------
|
||||||
|
argb | setARGB()
|
||||||
|
|
||||||
|
**\PhpOffice\PhpSpreadsheet\Style\Fill**
|
||||||
|
|
||||||
|
Array key | Maps to property
|
||||||
|
-----------|-------------------
|
||||||
|
color | getStartColor()
|
||||||
|
endColor | getEndColor()
|
||||||
|
fillType | setFillType()
|
||||||
|
rotation | setRotation()
|
||||||
|
startColor | getStartColor()
|
||||||
|
|
||||||
|
**\PhpOffice\PhpSpreadsheet\Style\Font**
|
||||||
|
|
||||||
|
Array key | Maps to property
|
||||||
|
------------|-------------------
|
||||||
|
bold | setBold()
|
||||||
|
color | getColor()
|
||||||
|
italic | setItalic()
|
||||||
|
name | setName()
|
||||||
|
size | setSize()
|
||||||
|
strikethrough | setStrikethrough()
|
||||||
|
subscript | setSubscript()
|
||||||
|
superscript | setSuperscript()
|
||||||
|
underline | setUnderline()
|
||||||
|
|
||||||
**\PhpOffice\PhpSpreadsheet\Style\NumberFormat**
|
**\PhpOffice\PhpSpreadsheet\Style\NumberFormat**
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,10 @@ class Alignment extends Supervisor
|
||||||
const READORDER_LTR = 1;
|
const READORDER_LTR = 1;
|
||||||
const READORDER_RTL = 2;
|
const READORDER_RTL = 2;
|
||||||
|
|
||||||
|
// Special value for Text Rotation
|
||||||
|
const TEXTROTATION_STACK_EXCEL = 255;
|
||||||
|
const TEXTROTATION_STACK_PHPSPREADSHEET = -165; // 90 - 255
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Horizontal alignment.
|
* Horizontal alignment.
|
||||||
*
|
*
|
||||||
|
@ -270,12 +274,12 @@ class Alignment extends Supervisor
|
||||||
public function setTextRotation($pValue)
|
public function setTextRotation($pValue)
|
||||||
{
|
{
|
||||||
// Excel2007 value 255 => PhpSpreadsheet value -165
|
// Excel2007 value 255 => PhpSpreadsheet value -165
|
||||||
if ($pValue == 255) {
|
if ($pValue == self::TEXTROTATION_STACK_EXCEL) {
|
||||||
$pValue = -165;
|
$pValue = self::TEXTROTATION_STACK_PHPSPREADSHEET;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set rotation
|
// Set rotation
|
||||||
if (($pValue >= -90 && $pValue <= 90) || $pValue == -165) {
|
if (($pValue >= -90 && $pValue <= 90) || $pValue == self::TEXTROTATION_STACK_PHPSPREADSHEET) {
|
||||||
if ($this->isSupervisor) {
|
if ($this->isSupervisor) {
|
||||||
$styleArray = $this->getStyleArray(['textRotation' => $pValue]);
|
$styleArray = $this->getStyleArray(['textRotation' => $pValue]);
|
||||||
$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
|
$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
|
||||||
|
@ -461,4 +465,18 @@ class Alignment extends Supervisor
|
||||||
__CLASS__
|
__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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,14 +74,6 @@ class Border extends Supervisor
|
||||||
public function getSharedComponent()
|
public function getSharedComponent()
|
||||||
{
|
{
|
||||||
switch ($this->parentPropertyName) {
|
switch ($this->parentPropertyName) {
|
||||||
case 'allBorders':
|
|
||||||
case 'horizontal':
|
|
||||||
case 'inside':
|
|
||||||
case 'outline':
|
|
||||||
case 'vertical':
|
|
||||||
throw new PhpSpreadsheetException('Cannot get shared component for a pseudo-border.');
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 'bottom':
|
case 'bottom':
|
||||||
return $this->parent->getSharedComponent()->getBottom();
|
return $this->parent->getSharedComponent()->getBottom();
|
||||||
case 'diagonal':
|
case 'diagonal':
|
||||||
|
@ -93,6 +85,8 @@ class Border extends Supervisor
|
||||||
case 'top':
|
case 'top':
|
||||||
return $this->parent->getSharedComponent()->getTop();
|
return $this->parent->getSharedComponent()->getTop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw new PhpSpreadsheetException('Cannot get shared component for a pseudo-border.');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -228,4 +222,13 @@ class Border extends Supervisor
|
||||||
__CLASS__
|
__CLASS__
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function exportArray1(): array
|
||||||
|
{
|
||||||
|
$exportedArray = [];
|
||||||
|
$this->exportArray2($exportedArray, 'borderStyle', $this->getBorderStyle());
|
||||||
|
$this->exportArray2($exportedArray, 'color', $this->getColor());
|
||||||
|
|
||||||
|
return $exportedArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -408,4 +408,17 @@ class Borders extends Supervisor
|
||||||
__CLASS__
|
__CLASS__
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function exportArray1(): array
|
||||||
|
{
|
||||||
|
$exportedArray = [];
|
||||||
|
$this->exportArray2($exportedArray, 'bottom', $this->getBottom());
|
||||||
|
$this->exportArray2($exportedArray, 'diagonal', $this->getDiagonal());
|
||||||
|
$this->exportArray2($exportedArray, 'diagonalDirection', $this->getDiagonalDirection());
|
||||||
|
$this->exportArray2($exportedArray, 'left', $this->getLeft());
|
||||||
|
$this->exportArray2($exportedArray, 'right', $this->getRight());
|
||||||
|
$this->exportArray2($exportedArray, 'top', $this->getTop());
|
||||||
|
|
||||||
|
return $exportedArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,14 +71,14 @@ class Color extends Supervisor
|
||||||
*/
|
*/
|
||||||
public function getSharedComponent()
|
public function getSharedComponent()
|
||||||
{
|
{
|
||||||
switch ($this->parentPropertyName) {
|
if ($this->parentPropertyName === 'endColor') {
|
||||||
case 'endColor':
|
|
||||||
return $this->parent->getSharedComponent()->getEndColor();
|
return $this->parent->getSharedComponent()->getEndColor();
|
||||||
case 'color':
|
}
|
||||||
return $this->parent->getSharedComponent()->getColor();
|
if ($this->parentPropertyName === 'startColor') {
|
||||||
case 'startColor':
|
|
||||||
return $this->parent->getSharedComponent()->getStartColor();
|
return $this->parent->getSharedComponent()->getStartColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $this->parent->getSharedComponent()->getColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -262,6 +262,7 @@ class Color extends Supervisor
|
||||||
public static function changeBrightness($hex, $adjustPercentage)
|
public static function changeBrightness($hex, $adjustPercentage)
|
||||||
{
|
{
|
||||||
$rgba = (strlen($hex) === 8);
|
$rgba = (strlen($hex) === 8);
|
||||||
|
$adjustPercentage = max(-1.0, min(1.0, $adjustPercentage));
|
||||||
|
|
||||||
$red = self::getRed($hex, false);
|
$red = self::getRed($hex, false);
|
||||||
$green = self::getGreen($hex, false);
|
$green = self::getGreen($hex, false);
|
||||||
|
@ -276,22 +277,6 @@ class Color extends Supervisor
|
||||||
$blue += $blue * $adjustPercentage;
|
$blue += $blue * $adjustPercentage;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($red < 0) {
|
|
||||||
$red = 0;
|
|
||||||
} elseif ($red > 255) {
|
|
||||||
$red = 255;
|
|
||||||
}
|
|
||||||
if ($green < 0) {
|
|
||||||
$green = 0;
|
|
||||||
} elseif ($green > 255) {
|
|
||||||
$green = 255;
|
|
||||||
}
|
|
||||||
if ($blue < 0) {
|
|
||||||
$blue = 0;
|
|
||||||
} elseif ($blue > 255) {
|
|
||||||
$blue = 255;
|
|
||||||
}
|
|
||||||
|
|
||||||
$rgb = strtoupper(
|
$rgb = strtoupper(
|
||||||
str_pad(dechex((int) $red), 2, '0', 0) .
|
str_pad(dechex((int) $red), 2, '0', 0) .
|
||||||
str_pad(dechex((int) $green), 2, '0', 0) .
|
str_pad(dechex((int) $green), 2, '0', 0) .
|
||||||
|
@ -404,4 +389,12 @@ class Color extends Supervisor
|
||||||
__CLASS__
|
__CLASS__
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function exportArray1(): array
|
||||||
|
{
|
||||||
|
$exportedArray = [];
|
||||||
|
$this->exportArray2($exportedArray, 'argb', $this->getARGB());
|
||||||
|
|
||||||
|
return $exportedArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -311,4 +311,15 @@ class Fill extends Supervisor
|
||||||
__CLASS__
|
__CLASS__
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function exportArray1(): array
|
||||||
|
{
|
||||||
|
$exportedArray = [];
|
||||||
|
$this->exportArray2($exportedArray, 'endColor', $this->getEndColor());
|
||||||
|
$this->exportArray2($exportedArray, 'fillType', $this->getFillType());
|
||||||
|
$this->exportArray2($exportedArray, 'rotation', $this->getRotation());
|
||||||
|
$this->exportArray2($exportedArray, 'startColor', $this->getStartColor());
|
||||||
|
|
||||||
|
return $exportedArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -539,4 +539,20 @@ class Font extends Supervisor
|
||||||
__CLASS__
|
__CLASS__
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function exportArray1(): array
|
||||||
|
{
|
||||||
|
$exportedArray = [];
|
||||||
|
$this->exportArray2($exportedArray, 'bold', $this->getBold());
|
||||||
|
$this->exportArray2($exportedArray, 'color', $this->getColor());
|
||||||
|
$this->exportArray2($exportedArray, 'italic', $this->getItalic());
|
||||||
|
$this->exportArray2($exportedArray, 'name', $this->getName());
|
||||||
|
$this->exportArray2($exportedArray, 'size', $this->getSize());
|
||||||
|
$this->exportArray2($exportedArray, 'strikethrough', $this->getStrikethrough());
|
||||||
|
$this->exportArray2($exportedArray, 'subscript', $this->getSubscript());
|
||||||
|
$this->exportArray2($exportedArray, 'superscript', $this->getSuperscript());
|
||||||
|
$this->exportArray2($exportedArray, 'underline', $this->getUnderline());
|
||||||
|
|
||||||
|
return $exportedArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -870,4 +870,12 @@ class NumberFormat extends Supervisor
|
||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function exportArray1(): array
|
||||||
|
{
|
||||||
|
$exportedArray = [];
|
||||||
|
$this->exportArray2($exportedArray, 'formatCode', $this->getFormatCode());
|
||||||
|
|
||||||
|
return $exportedArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,4 +183,13 @@ class Protection extends Supervisor
|
||||||
__CLASS__
|
__CLASS__
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function exportArray1(): array
|
||||||
|
{
|
||||||
|
$exportedArray = [];
|
||||||
|
$this->exportArray2($exportedArray, 'locked', $this->getLocked());
|
||||||
|
$this->exportArray2($exportedArray, 'hidden', $this->getHidden());
|
||||||
|
|
||||||
|
return $exportedArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -636,4 +636,18 @@ class Style extends Supervisor
|
||||||
{
|
{
|
||||||
$this->index = $pValue;
|
$this->index = $pValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function exportArray1(): array
|
||||||
|
{
|
||||||
|
$exportedArray = [];
|
||||||
|
$this->exportArray2($exportedArray, 'alignment', $this->getAlignment());
|
||||||
|
$this->exportArray2($exportedArray, 'borders', $this->getBorders());
|
||||||
|
$this->exportArray2($exportedArray, 'fill', $this->getFill());
|
||||||
|
$this->exportArray2($exportedArray, 'font', $this->getFont());
|
||||||
|
$this->exportArray2($exportedArray, 'numberFormat', $this->getNumberFormat());
|
||||||
|
$this->exportArray2($exportedArray, 'protection', $this->getProtection());
|
||||||
|
$this->exportArray2($exportedArray, 'quotePrefx', $this->getQuotePrefix());
|
||||||
|
|
||||||
|
return $exportedArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -114,4 +114,45 @@ abstract class Supervisor implements IComparable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Export style as array.
|
||||||
|
*
|
||||||
|
* Available to anything which extends this class:
|
||||||
|
* Alignment, Border, Borders, Color, Fill, Font,
|
||||||
|
* NumberFormat, Protection, and Style.
|
||||||
|
*/
|
||||||
|
final public function exportArray(): array
|
||||||
|
{
|
||||||
|
return $this->exportArray1();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract method to be implemented in anything which
|
||||||
|
* extends this class.
|
||||||
|
*
|
||||||
|
* This method invokes exportArray2 with the names and values
|
||||||
|
* of all properties to be included in output array,
|
||||||
|
* returning that array to exportArray, then to caller.
|
||||||
|
*/
|
||||||
|
abstract protected function exportArray1(): array;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populate array from exportArray1.
|
||||||
|
* This method is available to anything which extends this class.
|
||||||
|
* The parameter index is the key to be added to the array.
|
||||||
|
* The parameter objOrValue is either a primitive type,
|
||||||
|
* which is the value added to the array,
|
||||||
|
* or a Style object to be recursively added via exportArray.
|
||||||
|
*
|
||||||
|
* @param mixed $objOrValue
|
||||||
|
*/
|
||||||
|
final protected function exportArray2(array &$exportedArray, string $index, $objOrValue): void
|
||||||
|
{
|
||||||
|
if ($objOrValue instanceof self) {
|
||||||
|
$exportedArray[$index] = $objOrValue->exportArray();
|
||||||
|
} else {
|
||||||
|
$exportedArray[$index] = $objOrValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PhpOffice\PhpSpreadsheetTests\Style;
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Alignment;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class AlignmentTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testAlignment(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cell1 = $sheet->getCell('A1');
|
||||||
|
$cell1->setValue('Cell1');
|
||||||
|
$cell1->getStyle()->getAlignment()->setTextRotation(45);
|
||||||
|
self::assertEquals(45, $cell1->getStyle()->getAlignment()->getTextRotation());
|
||||||
|
$cell2 = $sheet->getCell('A2');
|
||||||
|
$cell2->setValue('Cell2');
|
||||||
|
$cell2->getStyle()->getAlignment()->setTextRotation(-45);
|
||||||
|
self::assertEquals(-45, $cell2->getStyle()->getAlignment()->getTextRotation());
|
||||||
|
// special value for stacked
|
||||||
|
$cell3 = $sheet->getCell('A3');
|
||||||
|
$cell3->setValue('Cell3');
|
||||||
|
$cell3->getStyle()->getAlignment()->setTextRotation(255);
|
||||||
|
self::assertEquals(-165, $cell3->getStyle()->getAlignment()->getTextRotation());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRotationTooHigh(): void
|
||||||
|
{
|
||||||
|
$this->expectException(PhpSpreadsheetException::class);
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cell1 = $sheet->getCell('A1');
|
||||||
|
$cell1->setValue('Cell1');
|
||||||
|
$cell1->getStyle()->getAlignment()->setTextRotation(91);
|
||||||
|
self::assertEquals(0, $cell1->getStyle()->getAlignment()->getTextRotation());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRotationTooLow(): void
|
||||||
|
{
|
||||||
|
$this->expectException(PhpSpreadsheetException::class);
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cell1 = $sheet->getCell('A1');
|
||||||
|
$cell1->setValue('Cell1');
|
||||||
|
$cell1->getStyle()->getAlignment()->setTextRotation(-91);
|
||||||
|
self::assertEquals(0, $cell1->getStyle()->getAlignment()->getTextRotation());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHorizontal(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cell1 = $sheet->getCell('A1');
|
||||||
|
$cell1->setValue('X');
|
||||||
|
$cell1->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT)->setIndent(1);
|
||||||
|
self::assertEquals(Alignment::HORIZONTAL_LEFT, $cell1->getStyle()->getAlignment()->getHorizontal());
|
||||||
|
self::assertEquals(1, $cell1->getStyle()->getAlignment()->getIndent());
|
||||||
|
$cell2 = $sheet->getCell('A2');
|
||||||
|
$cell2->setValue('Y');
|
||||||
|
$cell2->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT)->setIndent(2);
|
||||||
|
self::assertEquals(Alignment::HORIZONTAL_RIGHT, $cell2->getStyle()->getAlignment()->getHorizontal());
|
||||||
|
self::assertEquals(2, $cell2->getStyle()->getAlignment()->getIndent());
|
||||||
|
$cell3 = $sheet->getCell('A3');
|
||||||
|
$cell3->setValue('Z');
|
||||||
|
// indent not supported for next style - changed to 0
|
||||||
|
$cell3->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER_CONTINUOUS)->setIndent(3);
|
||||||
|
self::assertEquals(Alignment::HORIZONTAL_CENTER_CONTINUOUS, $cell3->getStyle()->getAlignment()->getHorizontal());
|
||||||
|
self::assertEquals(0, $cell3->getStyle()->getAlignment()->getIndent());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testReadOrder(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cell1 = $sheet->getCell('A1');
|
||||||
|
$cell1->setValue('ABC');
|
||||||
|
$cell1->getStyle()->getAlignment()->setReadOrder(0);
|
||||||
|
self::assertEquals(0, $cell1->getStyle()->getAlignment()->getReadOrder());
|
||||||
|
$cell1->getStyle()->getAlignment()->setReadOrder(1);
|
||||||
|
self::assertEquals(1, $cell1->getStyle()->getAlignment()->getReadOrder());
|
||||||
|
// following not supported - zero is used instead
|
||||||
|
$cell1->getStyle()->getAlignment()->setReadOrder(-1);
|
||||||
|
self::assertEquals(0, $cell1->getStyle()->getAlignment()->getReadOrder());
|
||||||
|
$cell1->getStyle()->getAlignment()->setReadOrder(2);
|
||||||
|
self::assertEquals(2, $cell1->getStyle()->getAlignment()->getReadOrder());
|
||||||
|
// following not supported - zero is used instead
|
||||||
|
$cell1->getStyle()->getAlignment()->setReadOrder(3);
|
||||||
|
self::assertEquals(0, $cell1->getStyle()->getAlignment()->getReadOrder());
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,13 +2,16 @@
|
||||||
|
|
||||||
namespace PhpOffice\PhpSpreadsheetTests\Style;
|
namespace PhpOffice\PhpSpreadsheetTests\Style;
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
|
||||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
use PhpOffice\PhpSpreadsheet\Style\Border;
|
use PhpOffice\PhpSpreadsheet\Style\Border;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Borders;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Color;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
class BorderTest extends TestCase
|
class BorderTest extends TestCase
|
||||||
{
|
{
|
||||||
public function testCase(): void
|
public function testAllBorders(): void
|
||||||
{
|
{
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
$borders = $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders();
|
$borders = $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders();
|
||||||
|
@ -22,5 +25,223 @@ class BorderTest extends TestCase
|
||||||
|
|
||||||
$actual = $bottom->getBorderStyle();
|
$actual = $bottom->getBorderStyle();
|
||||||
self::assertSame(Border::BORDER_THIN, $actual, 'should have been set via allBorders');
|
self::assertSame(Border::BORDER_THIN, $actual, 'should have been set via allBorders');
|
||||||
|
self::assertSame(Border::BORDER_THIN, $borders->getTop()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $borders->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $borders->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $borders->getDiagonal()->getBorderStyle());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAllBordersArray(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$sheet->getStyle('A1')->getBorders()->applyFromArray(['allBorders' => ['borderStyle' => Border::BORDER_THIN]]);
|
||||||
|
$borders = $sheet->getCell('A1')->getStyle()->getBorders();
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_THIN, $borders->getBottom()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $borders->getTop()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $borders->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $borders->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $borders->getDiagonal()->getBorderStyle());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAllBordersArrayNotSupervisor(): void
|
||||||
|
{
|
||||||
|
$borders = new Borders();
|
||||||
|
$borders->applyFromArray(['allBorders' => ['borderStyle' => Border::BORDER_THIN]]);
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_THIN, $borders->getBottom()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $borders->getTop()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $borders->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $borders->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $borders->getDiagonal()->getBorderStyle());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testOutline(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$borders = $sheet->getStyle('A1:B2')->getBorders();
|
||||||
|
$outline = $borders->getOutline();
|
||||||
|
$outline->setBorderStyle(Border::BORDER_THIN);
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('A1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('A1')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('A2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('A2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('B1')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('B1')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('B2')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('B2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInside(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$borders = $sheet->getStyle('A1:B2')->getBorders();
|
||||||
|
$inside = $borders->getInside();
|
||||||
|
$inside->setBorderStyle(Border::BORDER_THIN);
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('A1')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('A1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('A2')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('A2')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('B1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('B1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('B2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('B2')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHorizontal(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$borders = $sheet->getStyle('A1:B2')->getBorders();
|
||||||
|
$horizontal = $borders->getHorizontal();
|
||||||
|
$horizontal->setBorderStyle(Border::BORDER_THIN);
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('A1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('A2')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('B1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('B2')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testVertical(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$borders = $sheet->getStyle('A1:B2')->getBorders();
|
||||||
|
$vertical = $borders->getVertical();
|
||||||
|
$vertical->setBorderStyle(Border::BORDER_THIN);
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('A1')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('A2')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('A2')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('B1')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B1')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getRight()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getBottom()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_THIN, $sheet->getCell('B2')->getStyle()->getBorders()->getLeft()->getBorderStyle());
|
||||||
|
self::assertSame(Border::BORDER_NONE, $sheet->getCell('B2')->getStyle()->getBorders()->getTop()->getBorderStyle());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNoSupervisorAllBorders(): void
|
||||||
|
{
|
||||||
|
$this->expectException(PhpSpreadsheetException::class);
|
||||||
|
$borders = new Borders();
|
||||||
|
$borders->getAllBorders();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNoSupervisorOutline(): void
|
||||||
|
{
|
||||||
|
$this->expectException(PhpSpreadsheetException::class);
|
||||||
|
$borders = new Borders();
|
||||||
|
$borders->getOutline();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNoSupervisorInside(): void
|
||||||
|
{
|
||||||
|
$this->expectException(PhpSpreadsheetException::class);
|
||||||
|
$borders = new Borders();
|
||||||
|
$borders->getInside();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNoSupervisorVertical(): void
|
||||||
|
{
|
||||||
|
$this->expectException(PhpSpreadsheetException::class);
|
||||||
|
$borders = new Borders();
|
||||||
|
$borders->getVertical();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNoSupervisorHorizontal(): void
|
||||||
|
{
|
||||||
|
$this->expectException(PhpSpreadsheetException::class);
|
||||||
|
$borders = new Borders();
|
||||||
|
$borders->getHorizontal();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetSharedComponentPseudo(): void
|
||||||
|
{
|
||||||
|
$this->expectException(PhpSpreadsheetException::class);
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$sheet->getStyle('A1')->getBorders()->getHorizontal()->setBorderStyle(Border::BORDER_MEDIUM);
|
||||||
|
$sheet->getStyle('A1')->getBorders()->getHorizontal()->getSharedComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testBorderStyle(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$sheet->getStyle('A1')->getBorders()->getTop()->setBorderStyle(false);
|
||||||
|
$sheet->getStyle('A2')->getBorders()->getTop()->setBorderStyle(true);
|
||||||
|
self::assertEquals(Border::BORDER_NONE, $sheet->getStyle('A1')->getBorders()->getTop()->getBorderStyle());
|
||||||
|
self::assertEquals(Border::BORDER_MEDIUM, $sheet->getStyle('A2')->getBorders()->getTop()->getBorderStyle());
|
||||||
|
$sheet->getStyle('A3')->getBorders()->getTop()->applyFromArray(['borderStyle' => Border::BORDER_MEDIUM]);
|
||||||
|
self::assertEquals(Border::BORDER_MEDIUM, $sheet->getStyle('A3')->getBorders()->getTop()->getBorderStyle());
|
||||||
|
$border = new Border();
|
||||||
|
$border->setBorderStyle(Border::BORDER_THIN)->setColor(new Color('FFFF0000'));
|
||||||
|
self::assertEquals('FFFF0000', $border->getColor()->getARGB());
|
||||||
|
self::assertEquals(Border::BORDER_THIN, $border->getBorderStyle());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDiagonalDirection(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$sheet->getStyle('A1')->getBorders()->getDiagonal()->setBorderStyle(Border::BORDER_MEDIUM);
|
||||||
|
$sheet->getStyle('A1')->getBorders()->setDiagonalDirection(Borders::DIAGONAL_BOTH);
|
||||||
|
$borders = $sheet->getStyle('A1')->getBorders();
|
||||||
|
|
||||||
|
self::assertSame(Border::BORDER_MEDIUM, $borders->getDiagonal()->getBorderStyle());
|
||||||
|
self::assertSame(Borders::DIAGONAL_BOTH, $borders->getDiagonalDirection());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,4 +70,21 @@ class ColorTest extends TestCase
|
||||||
{
|
{
|
||||||
return require 'tests/data/Style/ColorChangeBrightness.php';
|
return require 'tests/data/Style/ColorChangeBrightness.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testDefaultColor(): void
|
||||||
|
{
|
||||||
|
$color = new Color();
|
||||||
|
$color->setARGB('FFFF0000');
|
||||||
|
self::assertEquals('FFFF0000', $color->getARGB());
|
||||||
|
self::assertEquals('FF0000', $color->getRGB());
|
||||||
|
$color->setARGB('');
|
||||||
|
self::assertEquals(Color::COLOR_BLACK, $color->getARGB());
|
||||||
|
self::assertEquals('000000', $color->getRGB());
|
||||||
|
$color->setARGB('FFFF0000');
|
||||||
|
self::assertEquals('FFFF0000', $color->getARGB());
|
||||||
|
self::assertEquals('FF0000', $color->getRGB());
|
||||||
|
$color->setRGB('');
|
||||||
|
self::assertEquals(Color::COLOR_BLACK, $color->getARGB());
|
||||||
|
self::assertEquals('000000', $color->getRGB());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PhpOffice\PhpSpreadsheetTests\Style;
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Conditional;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class ConditionalTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testClone(): void
|
||||||
|
{
|
||||||
|
$condition1 = new Conditional();
|
||||||
|
$condition1->setConditionType(Conditional::CONDITION_CELLIS);
|
||||||
|
$condition1->setOperatorType(Conditional::OPERATOR_LESSTHAN);
|
||||||
|
$condition1->addCondition(0.6);
|
||||||
|
$condition1->getStyle()->getFill()
|
||||||
|
->setFillType(Fill::FILL_SOLID)
|
||||||
|
->getEndColor()->setARGB('FFFF0000');
|
||||||
|
$conditionclone = clone $condition1;
|
||||||
|
self::AssertEquals($condition1, $conditionclone);
|
||||||
|
self::AssertEquals($condition1->getStyle(), $conditionclone->getStyle());
|
||||||
|
self::AssertNotSame($condition1->getStyle(), $conditionclone->getStyle());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testVariousAdds(): void
|
||||||
|
{
|
||||||
|
$condition1 = new Conditional();
|
||||||
|
$condition1->setConditionType(Conditional::CONDITION_CELLIS);
|
||||||
|
$condition1->setOperatorType(Conditional::OPERATOR_LESSTHAN);
|
||||||
|
$condition1->addCondition(0.6);
|
||||||
|
$condition1->getStyle()->getFill()
|
||||||
|
->setFillType(Fill::FILL_SOLID)
|
||||||
|
->getEndColor()->setARGB('FFFF0000');
|
||||||
|
$condition2 = new Conditional();
|
||||||
|
$condition2->setConditionType(Conditional::CONDITION_CELLIS);
|
||||||
|
$condition2->setOperatorType(Conditional::OPERATOR_LESSTHAN);
|
||||||
|
$condition2->setConditions(0.6);
|
||||||
|
$condition2->getStyle()->getFill()
|
||||||
|
->setFillType(Fill::FILL_SOLID)
|
||||||
|
->getEndColor()->setARGB('FFFF0000');
|
||||||
|
$condition3 = new Conditional();
|
||||||
|
$condition3->setConditionType(Conditional::CONDITION_CELLIS);
|
||||||
|
$condition3->setOperatorType(Conditional::OPERATOR_LESSTHAN);
|
||||||
|
$condition3->setConditions([0.6]);
|
||||||
|
$condition3->getStyle()->getFill()
|
||||||
|
->setFillType(Fill::FILL_SOLID)
|
||||||
|
->getEndColor()->setARGB('FFFF0000');
|
||||||
|
self::AssertEquals($condition1, $condition2);
|
||||||
|
self::AssertEquals($condition1, $condition3);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,161 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PhpOffice\PhpSpreadsheetTests\Style;
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Alignment;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Border;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Color;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Font;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Protection;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class ExportArrayTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testStyleCopy(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cell1 = $sheet->getCell('A1');
|
||||||
|
$cell1->setValue('Cell A1');
|
||||||
|
$cell1style = $cell1->getStyle();
|
||||||
|
$cell1style->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT);
|
||||||
|
$cell1style->getFont()->getColor()->setARGB('FFFF0000');
|
||||||
|
$cell1style->getFont()->setBold(true);
|
||||||
|
$cell1style->getFill()->setFillType(Fill::FILL_PATTERN_GRAY125);
|
||||||
|
$cell1style->getFill()->setStartColor(new Color('FF0000FF'));
|
||||||
|
$cell1style->getFill()->setEndColor(new Color('FF00FF00'));
|
||||||
|
$cell1style->getFont()->setUnderline(true);
|
||||||
|
self::assertEquals(Font::UNDERLINE_SINGLE, $cell1style->getFont()->getUnderline());
|
||||||
|
$cell1style->getProtection()->setHidden(Protection::PROTECTION_UNPROTECTED);
|
||||||
|
$cell1style->getProtection()->setLocked(Protection::PROTECTION_UNPROTECTED);
|
||||||
|
$styleArray = $cell1style->exportArray();
|
||||||
|
$cell2 = $sheet->getCell('B1');
|
||||||
|
$cell2->setValue('Cell B1');
|
||||||
|
$cell2style = $cell2->getStyle();
|
||||||
|
$cell2style->applyFromArray($styleArray);
|
||||||
|
|
||||||
|
self::AssertEquals($cell1style->getAlignment()->getHorizontal(), $cell2style->getAlignment()->getHorizontal());
|
||||||
|
self::AssertEquals($cell1style->getFont()->getColor()->getARGB(), $cell2style->getFont()->getColor()->getARGB());
|
||||||
|
self::AssertEquals($cell1style->getFont()->getBold(), $cell2style->getFont()->getBold());
|
||||||
|
self::AssertEquals($cell1style->getFont()->getUnderline(), $cell2style->getFont()->getUnderline());
|
||||||
|
self::AssertEquals($cell1style->getFill()->getFillType(), $cell2style->getFill()->getFillType());
|
||||||
|
self::AssertEquals($cell1style->getFill()->getStartColor()->getARGB(), $cell2style->getFill()->getStartColor()->getARGB());
|
||||||
|
self::AssertEquals($cell1style->getFill()->getEndColor()->getARGB(), $cell2style->getFill()->getEndColor()->getARGB());
|
||||||
|
self::AssertEquals($cell1style->getProtection()->getLocked(), $cell2style->getProtection()->getLocked());
|
||||||
|
self::AssertEquals($cell1style->getProtection()->getHidden(), $cell2style->getProtection()->getHidden());
|
||||||
|
|
||||||
|
self::AssertEquals($cell1style->getHashCode(), $cell2style->getHashCode());
|
||||||
|
self::AssertEquals($cell1style->getAlignment()->getHashCode(), $cell2style->getAlignment()->getHashCode());
|
||||||
|
self::AssertEquals($cell1style->getFont()->getHashCode(), $cell2style->getFont()->getHashCode());
|
||||||
|
self::AssertEquals($cell1style->getFill()->getHashCode(), $cell2style->getFill()->getHashCode());
|
||||||
|
self::AssertEquals($cell1style->getProtection()->getHashCode(), $cell2style->getProtection()->getHashCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStyleFromArrayCopy(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cell1 = $sheet->getCell('A1');
|
||||||
|
$cell1->setValue('Cell A1');
|
||||||
|
$cell1style = $cell1->getStyle();
|
||||||
|
$cell1style->getAlignment()->applyFromArray(['horizontal' => Alignment::HORIZONTAL_RIGHT]);
|
||||||
|
$cell1style->getFont()->getColor()->setARGB('FFFF0000');
|
||||||
|
$cell1style->getFont()->applyFromArray(['bold' => true]);
|
||||||
|
$cell1style->getFill()->applyFromArray(['fillType' => Fill::FILL_PATTERN_GRAY125]);
|
||||||
|
$cell1style->getFill()->getStartColor()->applyFromArray(['argb' => 'FF0000FF']);
|
||||||
|
$cell1style->getFill()->getEndColor()->setRGB('00FF00');
|
||||||
|
$cell1style->getFill()->setRotation(45);
|
||||||
|
$cell1style->getFont()->setUnderline(true);
|
||||||
|
self::assertEquals(Font::UNDERLINE_SINGLE, $cell1style->getFont()->getUnderline());
|
||||||
|
$cell1style->getProtection()->applyFromArray(['hidden' => Protection::PROTECTION_UNPROTECTED, 'locked' => Protection::PROTECTION_UNPROTECTED]);
|
||||||
|
$styleArray = $cell1style->exportArray();
|
||||||
|
$cell2 = $sheet->getCell('B1');
|
||||||
|
$cell2->setValue('Cell B1');
|
||||||
|
$cell2style = $cell2->getStyle();
|
||||||
|
$cell2style->applyFromArray($styleArray);
|
||||||
|
|
||||||
|
self::AssertEquals($cell1style->getAlignment()->getHorizontal(), $cell2style->getAlignment()->getHorizontal());
|
||||||
|
self::AssertEquals($cell1style->getFont()->getColor()->getARGB(), $cell2style->getFont()->getColor()->getARGB());
|
||||||
|
self::AssertEquals($cell1style->getFont()->getBold(), $cell2style->getFont()->getBold());
|
||||||
|
self::AssertEquals($cell1style->getFont()->getUnderline(), $cell2style->getFont()->getUnderline());
|
||||||
|
self::AssertEquals($cell1style->getFill()->getFillType(), $cell2style->getFill()->getFillType());
|
||||||
|
self::AssertEquals($cell1style->getFill()->getRotation(), $cell2style->getFill()->getRotation());
|
||||||
|
self::AssertEquals($cell1style->getFill()->getStartColor()->getARGB(), $cell2style->getFill()->getStartColor()->getARGB());
|
||||||
|
self::AssertEquals($cell1style->getFill()->getEndColor()->getARGB(), $cell2style->getFill()->getEndColor()->getARGB());
|
||||||
|
self::AssertEquals($cell1style->getProtection()->getLocked(), $cell2style->getProtection()->getLocked());
|
||||||
|
self::AssertEquals($cell1style->getProtection()->getHidden(), $cell2style->getProtection()->getHidden());
|
||||||
|
|
||||||
|
self::AssertEquals($cell1style->getFill()->getStartColor()->getHashCode(), $cell2style->getFill()->getStartColor()->getHashCode());
|
||||||
|
self::AssertEquals($cell1style->getFill()->getEndColor()->getHashCode(), $cell2style->getFill()->getEndColor()->getHashCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNumberFormat(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cell1 = $sheet->getCell('A1');
|
||||||
|
$cell1style = $cell1->getStyle();
|
||||||
|
$fmt2 = '$ #,##0.000';
|
||||||
|
$cell1style->getNumberFormat()->setFormatCode($fmt2);
|
||||||
|
$cell1style->getFont()->setUnderline('');
|
||||||
|
self::assertEquals(Font::UNDERLINE_NONE, $cell1style->getFont()->getUnderline());
|
||||||
|
$cell1->setValue(2345.679);
|
||||||
|
$styleArray = $cell1style->exportArray();
|
||||||
|
self::assertEquals('$ 2,345.679', $cell1->getFormattedValue());
|
||||||
|
|
||||||
|
$cell2 = $sheet->getCell('B1');
|
||||||
|
$cell2->setValue(12345.679);
|
||||||
|
$cell2style = $cell2->getStyle();
|
||||||
|
$cell2style->applyFromArray($styleArray);
|
||||||
|
self::assertEquals('$ 12,345.679', $cell2->getFormattedValue());
|
||||||
|
|
||||||
|
self::AssertEquals($cell1style->getNumberFormat()->getHashCode(), $cell2style->getNumberFormat()->getHashCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNumberFormatFromArray(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cell1 = $sheet->getCell('A1');
|
||||||
|
$cell1style = $cell1->getStyle();
|
||||||
|
$fmt2 = '$ #,##0.000';
|
||||||
|
$cell1style->getNumberFormat()->applyFromArray(['formatCode' => $fmt2]);
|
||||||
|
$cell1style->getFont()->setUnderline('');
|
||||||
|
self::assertEquals(Font::UNDERLINE_NONE, $cell1style->getFont()->getUnderline());
|
||||||
|
$cell1style->getBorders()->getTop()->setBorderStyle(Border::BORDER_THIN);
|
||||||
|
$cell1->setValue(2345.679);
|
||||||
|
$styleArray = $cell1style->exportArray();
|
||||||
|
self::assertEquals('$ 2,345.679', $cell1->getFormattedValue());
|
||||||
|
|
||||||
|
$cell2 = $sheet->getCell('B1');
|
||||||
|
$cell2->setValue(12345.679);
|
||||||
|
$cell2style = $cell2->getStyle();
|
||||||
|
$cell2style->applyFromArray($styleArray);
|
||||||
|
self::assertEquals('$ 12,345.679', $cell2->getFormattedValue());
|
||||||
|
|
||||||
|
self::AssertEquals($cell1style->getNumberFormat()->getHashCode(), $cell2style->getNumberFormat()->getHashCode());
|
||||||
|
self::AssertEquals($cell1style->getBorders()->getHashCode(), $cell2style->getBorders()->getHashCode());
|
||||||
|
self::AssertEquals($cell1style->getBorders()->getTop()->getHashCode(), $cell2style->getBorders()->getTop()->getHashCode());
|
||||||
|
self::AssertEquals($cell1style->getBorders()->getTop()->getBorderStyle(), $cell2style->getBorders()->getTop()->getBorderStyle());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStackedRotation(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cell1 = $sheet->getCell('A1');
|
||||||
|
$cell1->setValue('Cell A1');
|
||||||
|
$cell1style = $cell1->getStyle();
|
||||||
|
$cell1style->getAlignment()->setTextRotation(Alignment::TEXTROTATION_STACK_EXCEL);
|
||||||
|
self::assertEquals(Alignment::TEXTROTATION_STACK_PHPSPREADSHEET, $cell1style->getAlignment()->getTextRotation());
|
||||||
|
$styleArray = $cell1style->exportArray();
|
||||||
|
$cell2 = $sheet->getCell('B1');
|
||||||
|
$cell2->setValue('Cell B1');
|
||||||
|
$cell2style = $cell2->getStyle();
|
||||||
|
$cell2style->applyFromArray($styleArray);
|
||||||
|
|
||||||
|
self::AssertEquals($cell1style->getAlignment()->getTextRotation(), $cell2style->getAlignment()->getTextRotation());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PhpOffice\PhpSpreadsheetTests\Style;
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Color;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class FillTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testNonSupervisorColor(): void
|
||||||
|
{
|
||||||
|
$fill = new Fill();
|
||||||
|
$startColor = new Color('FFFF0000');
|
||||||
|
$endColor = new Color('FF00FFFF');
|
||||||
|
$fill->setFillType(Fill::FILL_PATTERN_GRAY125);
|
||||||
|
$fill->setStartColor($startColor);
|
||||||
|
$fill->setEndColor($endColor);
|
||||||
|
self::assertEquals('FF0000', $fill->getStartColor()->getRGB());
|
||||||
|
self::assertEquals('00FFFF', $fill->getEndColor()->getRGB());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PhpOffice\PhpSpreadsheetTests\Style;
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class NumberFormatBuiltinTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testBuiltinCodes(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cell1 = $sheet->getCell('A1');
|
||||||
|
$cell1->setValue(1);
|
||||||
|
$cell1->getStyle()->getNumberFormat()->setBuiltInFormatCode(2); // 0.00
|
||||||
|
self::assertEquals('1.00', $cell1->getFormattedValue());
|
||||||
|
$cell2 = $sheet->getCell('A2');
|
||||||
|
$cell2->setValue(1234);
|
||||||
|
$cell2->getStyle()->getNumberFormat()->setFormatCode('#,##0'); // builtin 3
|
||||||
|
self::assertEquals(3, $cell2->getStyle()->getNumberFormat()->getBuiltinFormatCode());
|
||||||
|
self::assertEquals('1,234', $cell2->getFormattedValue());
|
||||||
|
$cell3 = $sheet->getCell('A3');
|
||||||
|
$cell3->setValue(1234);
|
||||||
|
$cell3->getStyle()->getNumberFormat()->setFormatCode(''); // General
|
||||||
|
self::assertEquals(NumberFormat::FORMAT_GENERAL, $cell3->getStyle()->getNumberFormat()->getFormatCode());
|
||||||
|
self::assertEquals(0, $cell3->getStyle()->getNumberFormat()->getBuiltinFormatCode());
|
||||||
|
self::assertEquals('1234', $cell3->getFormattedValue());
|
||||||
|
// non-supervisor
|
||||||
|
$numberFormat = new NumberFormat();
|
||||||
|
$numberFormat->setBuiltInFormatCode(4);
|
||||||
|
self::assertEquals('#,##0.00', $numberFormat->getFormatCode());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PhpOffice\PhpSpreadsheetTests\Style;
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class StyleTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testStyleOddMethods(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cellCoordinate = 'A1';
|
||||||
|
$cell1 = $sheet->getCell($cellCoordinate);
|
||||||
|
$cell1style = $cell1->getStyle();
|
||||||
|
self::assertSame($spreadsheet, $cell1style->getParent());
|
||||||
|
$styleArray = ['alignment' => ['textRotation' => 45]];
|
||||||
|
$outArray = $cell1style->getStyleArray($styleArray);
|
||||||
|
self::assertEquals($styleArray, $outArray['quotePrefix']);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue