From 52600ed81536b1b5826217d77eff128a5292a89a Mon Sep 17 00:00:00 2001 From: Takahiro Morimoto Date: Sun, 13 Dec 2020 16:53:41 +0900 Subject: [PATCH] Support DataBar of conditional formatting rule Implemented the databar of Conditional Type. - DataBar can be read, written, and added for basic use. - Supports reading, writing and adding using "extLst". About "extLst" - https://docs.microsoft.com/en-us/openspecs/office_standards/ms-xlsx/07d607af-5618-4ca2-b683-6a78dc0d9627 The following setting items on the Excel setting screen can be read, written, and added. - (minimum, maximum)type: Automatic, LowestValue, Number, Percent, Formula, Percentile - Direction: context, leftToRight, rightToLeft (show data bar only) - Fills Solid, Gradient - FillColor: PositiveValues, NegativeValues - Borders: Solid, None - BorderColor: PositiveValues, NegativeValues - Axis position: Automatic, Midpoint, None - Axis color --- CHANGELOG.md | 2 +- .../10-databar-of-conditional-formatting.png | Bin 0 -> 143616 bytes docs/topics/recipes.md | 38 ++ .../Reader/Xlsx/ConditionalStyles.php | 79 ++++- src/PhpSpreadsheet/Style/Conditional.php | 29 ++ .../ConditionalDataBar.php | 102 ++++++ .../ConditionalDataBarExtension.php | 290 ++++++++++++++++ .../ConditionalFormatValueObject.php | 80 +++++ .../ConditionalFormattingRuleExtension.php | 197 +++++++++++ src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php | 141 +++++++- .../ConditionalFormattingDataBarXlsxTest.php | 325 ++++++++++++++++++ .../conditionalFormattingDataBarTest.xlsx | Bin 0 -> 10443 bytes 12 files changed, 1270 insertions(+), 13 deletions(-) create mode 100644 docs/topics/images/10-databar-of-conditional-formatting.png create mode 100644 src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBar.php create mode 100644 src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBarExtension.php create mode 100644 src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormatValueObject.php create mode 100644 src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormattingRuleExtension.php create mode 100644 tests/PhpSpreadsheetTests/Reader/Xlsx/ConditionalFormattingDataBarXlsxTest.php create mode 100644 tests/data/Reader/XLSX/conditionalFormattingDataBarTest.xlsx diff --git a/CHANGELOG.md b/CHANGELOG.md index a4741afe0a..485b4479bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). ### Added -- Nothing. +- Implemented DataBar for conditional formatting in Xlsx, providing read/write and creation of (type, value, direction, fills, border, axis position, color settings) as DataBar options in Excel. [#1754](https://github.com/PHPOffice/PhpSpreadsheet/pull/1754) ### Changed diff --git a/docs/topics/images/10-databar-of-conditional-formatting.png b/docs/topics/images/10-databar-of-conditional-formatting.png new file mode 100644 index 0000000000000000000000000000000000000000..10c88f9f779317f7eaac4cfe9918b67969dc190e GIT binary patch literal 143616 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

pR!2!?M&CxOQ+SgakSwcQ1RER2(8!s6kL6!k~Z) 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 ); ``` +### DataBar of Conditional formatting +The basics are the same as conditional formatting. +Additional DataBar object to conditional formatting. + +For example, the following code will result in the conditional formatting shown in the image. +```php +$conditional = new Conditional(); +$conditional->setConditionType(Conditional::CONDITION_DATABAR); +$conditional->setDataBar(new ConditionalDataBar()); +$conditional->getDataBar() + ->setMinimumConditionalFormatValueObject(new ConditionalFormatValueObject('num', '2')) + ->setMaximumConditionalFormatValueObject(new ConditionalFormatValueObject('max')) + ->setColor('FFFF555A'); +$ext = $conditional + ->getDataBar() + ->setConditionalFormattingRuleExt(new ConditionalFormattingRuleExtension()) + ->getConditionalFormattingRuleExt(); + +$ext->setCfRule('dataBar'); +$ext->setSqref('A1:A5'); // target CellCoordinates +$ext->setDataBarExt(new ConditionalDataBarExtension()); +$ext->getDataBarExt() + ->setMinimumConditionalFormatValueObject(new ConditionalFormatValueObject('num', '2')) + ->setMaximumConditionalFormatValueObject(new ConditionalFormatValueObject('autoMax')) + ->setMinLength(0) + ->setMaxLength(100) + ->setBorder(true) + ->setDirection('rightToLeft') + ->setNegativeBarBorderColorSameAsPositive(false) + ->setBorderColor('FFFF555A') + ->setNegativeFillColor('FFFF0000') + ->setNegativeBorderColor('FFFF0000') + ->setAxisColor('FF000000'); + +``` + +![10-databar-of-conditional-formatting.png](./images/10-databar-of-conditional-formatting.png) + ## Add a comment to a cell To add a comment to a cell, use the following code. The example below diff --git a/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php b/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php index 4aa48e17ce..7f96956fbe 100644 --- a/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php +++ b/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php @@ -2,7 +2,11 @@ namespace PhpOffice\PhpSpreadsheet\Reader\Xlsx; +use PhpOffice\PhpSpreadsheet\Style\Color; use PhpOffice\PhpSpreadsheet\Style\Conditional; +use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\ConditionalDataBar; +use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\ConditionalFormattingRuleExtension; +use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\ConditionalFormatValueObject; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; use SimpleXMLElement; @@ -25,7 +29,8 @@ public function load(): void { $this->setConditionalStyles( $this->worksheet, - $this->readConditionalStyles($this->worksheetXml) + $this->readConditionalStyles($this->worksheetXml), + $this->worksheetXml->extLst ); } @@ -36,14 +41,16 @@ private function readConditionalStyles($xmlSheet) foreach ($conditional->cfRule as $cfRule) { if ( ((string) $cfRule['type'] == Conditional::CONDITION_NONE - || (string) $cfRule['type'] == Conditional::CONDITION_CELLIS - || (string) $cfRule['type'] == Conditional::CONDITION_CONTAINSTEXT - || (string) $cfRule['type'] == Conditional::CONDITION_CONTAINSBLANKS - || (string) $cfRule['type'] == Conditional::CONDITION_NOTCONTAINSBLANKS - || (string) $cfRule['type'] == Conditional::CONDITION_EXPRESSION) + || (string) $cfRule['type'] == Conditional::CONDITION_CELLIS + || (string) $cfRule['type'] == Conditional::CONDITION_CONTAINSTEXT + || (string) $cfRule['type'] == Conditional::CONDITION_CONTAINSBLANKS + || (string) $cfRule['type'] == Conditional::CONDITION_NOTCONTAINSBLANKS + || (string) $cfRule['type'] == Conditional::CONDITION_EXPRESSION) && isset($this->dxfs[(int) ($cfRule['dxfId'])]) ) { $conditionals[(string) $conditional['sqref']][(int) ($cfRule['priority'])] = $cfRule; + } elseif ((string) $cfRule['type'] == Conditional::CONDITION_DATABAR) { + $conditionals[(string) $conditional['sqref']][(int) ($cfRule['priority'])] = $cfRule; } } } @@ -51,11 +58,11 @@ private function readConditionalStyles($xmlSheet) return $conditionals; } - private function setConditionalStyles(Worksheet $worksheet, array $conditionals): void + private function setConditionalStyles(Worksheet $worksheet, array $conditionals, $xmlExtLst): void { foreach ($conditionals as $ref => $cfRules) { ksort($cfRules); - $conditionalStyles = $this->readStyleRules($cfRules); + $conditionalStyles = $this->readStyleRules($cfRules, $xmlExtLst); // Extract all cell references in $ref $cellBlocks = explode(' ', str_replace('$', '', strtoupper($ref))); @@ -65,8 +72,9 @@ private function setConditionalStyles(Worksheet $worksheet, array $conditionals) } } - private function readStyleRules($cfRules) + private function readStyleRules($cfRules, $extLst) { + $conditionalFormattingRuleExtensions = ConditionalFormattingRuleExtension::parseExtLstXml($extLst); $conditionalStyles = []; foreach ($cfRules as $cfRule) { $objConditional = new Conditional(); @@ -88,10 +96,61 @@ private function readStyleRules($cfRules) } else { $objConditional->addCondition((string) $cfRule->formula); } - $objConditional->setStyle(clone $this->dxfs[(int) ($cfRule['dxfId'])]); + + if (isset($cfRule->dataBar)) { + $objConditional->setDataBar($this->readDataBarOfConditionalRule($cfRule, $conditionalFormattingRuleExtensions)); + } else { + $objConditional->setStyle(clone $this->dxfs[(int) ($cfRule['dxfId'])]); + } + $conditionalStyles[] = $objConditional; } return $conditionalStyles; } + + private function readDataBarOfConditionalRule($cfRule, $conditionalFormattingRuleExtensions): ConditionalDataBar + { + $dataBar = new ConditionalDataBar(); + //dataBar attribute + if (isset($cfRule->dataBar['showValue'])) { + $dataBar->setShowValue((bool) $cfRule->dataBar['showValue']); + } + + //dataBar children + //conditionalFormatValueObjects + $cfvoXml = $cfRule->dataBar->cfvo; + $cfvoIndex = 0; + foreach ((count($cfvoXml) > 1 ? $cfvoXml : [$cfvoXml]) as $cfvo) { + if ($cfvoIndex === 0) { + $dataBar->setMinimumConditionalFormatValueObject(new ConditionalFormatValueObject((string) $cfvo['type'], (string) $cfvo['val'])); + } + if ($cfvoIndex === 1) { + $dataBar->setMaximumConditionalFormatValueObject(new ConditionalFormatValueObject((string) $cfvo['type'], (string) $cfvo['val'])); + } + ++$cfvoIndex; + } + + //color + if (isset($cfRule->dataBar->color)) { + $dataBar->setColor((string) $cfRule->dataBar->color['rgb']); + } + //extLst + $this->readDataBarExtLstOfConditionalRule($dataBar, $cfRule, $conditionalFormattingRuleExtensions); + + return $dataBar; + } + + private function readDataBarExtLstOfConditionalRule(ConditionalDataBar $dataBar, $cfRule, $conditionalFormattingRuleExtensions): void + { + if (isset($cfRule->extLst)) { + $ns = $cfRule->extLst->getNamespaces(true); + foreach ((count($cfRule->extLst) > 0 ? $cfRule->extLst->ext : [$cfRule->extLst->ext]) as $ext) { + $extId = (string) $ext->children($ns['x14'])->id; + if (isset($conditionalFormattingRuleExtensions[$extId]) && (string) $ext['uri'] === '{B025F937-C7B1-47D3-B67F-A62EFF666E3E}') { + $dataBar->setConditionalFormattingRuleExt($conditionalFormattingRuleExtensions[$extId]); + } + } + } + } } diff --git a/src/PhpSpreadsheet/Style/Conditional.php b/src/PhpSpreadsheet/Style/Conditional.php index e4fe0acc7f..b008c9f28b 100644 --- a/src/PhpSpreadsheet/Style/Conditional.php +++ b/src/PhpSpreadsheet/Style/Conditional.php @@ -3,6 +3,7 @@ namespace PhpOffice\PhpSpreadsheet\Style; use PhpOffice\PhpSpreadsheet\IComparable; +use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\ConditionalDataBar; class Conditional implements IComparable { @@ -13,6 +14,7 @@ class Conditional implements IComparable const CONDITION_EXPRESSION = 'expression'; const CONDITION_CONTAINSBLANKS = 'containsBlanks'; const CONDITION_NOTCONTAINSBLANKS = 'notContainsBlanks'; + const CONDITION_DATABAR = 'dataBar'; // Operator types const OPERATOR_NONE = ''; @@ -64,6 +66,11 @@ class Conditional implements IComparable */ private $condition = []; + /** + * @var ConditionalDataBar + */ + private $dataBar; + /** * Style. * @@ -241,6 +248,28 @@ public function setStyle(?Style $pValue = null) return $this; } + /** + * get DataBar. + * + * @return ConditionalDataBar | null + */ + public function getDataBar() + { + return $this->dataBar; + } + + /** + * set DataBar. + * + * @return $this + */ + public function setDataBar(ConditionalDataBar $dataBar) + { + $this->dataBar = $dataBar; + + return $this; + } + /** * Get hash code. * diff --git a/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBar.php b/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBar.php new file mode 100644 index 0000000000..54513670e4 --- /dev/null +++ b/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBar.php @@ -0,0 +1,102 @@ + attribute */ + + /** @var null|bool */ + private $showValue; + + /** children */ + + /** @var ConditionalFormatValueObject */ + private $minimumConditionalFormatValueObject; + + /** @var ConditionalFormatValueObject */ + private $maximumConditionalFormatValueObject; + + /** @var string */ + private $color; + + /** */ + + /** @var ConditionalFormattingRuleExtension */ + private $conditionalFormattingRuleExt; + + /** + * @return null|bool + */ + public function getShowValue() + { + return $this->showValue; + } + + /** + * @param bool $showValue + */ + public function setShowValue($showValue) + { + $this->showValue = $showValue; + + return $this; + } + + /** + * @return ConditionalFormatValueObject + */ + public function getMinimumConditionalFormatValueObject() + { + return $this->minimumConditionalFormatValueObject; + } + + public function setMinimumConditionalFormatValueObject(ConditionalFormatValueObject $minimumConditionalFormatValueObject) + { + $this->minimumConditionalFormatValueObject = $minimumConditionalFormatValueObject; + + return $this; + } + + /** + * @return ConditionalFormatValueObject + */ + public function getMaximumConditionalFormatValueObject() + { + return $this->maximumConditionalFormatValueObject; + } + + public function setMaximumConditionalFormatValueObject(ConditionalFormatValueObject $maximumConditionalFormatValueObject) + { + $this->maximumConditionalFormatValueObject = $maximumConditionalFormatValueObject; + + return $this; + } + + public function getColor(): string + { + return $this->color; + } + + public function setColor(string $color): self + { + $this->color = $color; + + return $this; + } + + /** + * @return ConditionalFormattingRuleExtension + */ + public function getConditionalFormattingRuleExt() + { + return $this->conditionalFormattingRuleExt; + } + + public function setConditionalFormattingRuleExt(ConditionalFormattingRuleExtension $conditionalFormattingRuleExt) + { + $this->conditionalFormattingRuleExt = $conditionalFormattingRuleExt; + + return $this; + } +} diff --git a/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBarExtension.php b/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBarExtension.php new file mode 100644 index 0000000000..c709cf3e70 --- /dev/null +++ b/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalDataBarExtension.php @@ -0,0 +1,290 @@ + attributes */ + + /** @var int */ + private $minLength; + + /** @var int */ + private $maxLength; + + /** @var null|bool */ + private $border; + + /** @var null|bool */ + private $gradient; + + /** @var string */ + private $direction; + + /** @var null|bool */ + private $negativeBarBorderColorSameAsPositive; + + /** @var string */ + private $axisPosition; + + // children + + /** @var ConditionalFormatValueObject */ + private $maximumConditionalFormatValueObject; + + /** @var ConditionalFormatValueObject */ + private $minimumConditionalFormatValueObject; + + /** @var string */ + private $borderColor; + + /** @var string */ + private $negativeFillColor; + + /** @var string */ + private $negativeBorderColor; + + /** @var array */ + private $axisColor = [ + 'rgb' => null, + 'theme' => null, + 'tint' => null, + ]; + + public function getXmlAttributes() + { + $ret = []; + foreach (['minLength', 'maxLength', 'direction', 'axisPosition'] as $attrKey) { + if (null !== $this->{$attrKey}) { + $ret[$attrKey] = $this->{$attrKey}; + } + } + foreach (['border', 'gradient', 'negativeBarBorderColorSameAsPositive'] as $attrKey) { + if (null !== $this->{$attrKey}) { + $ret[$attrKey] = $this->{$attrKey} ? '1' : '0'; + } + } + + return $ret; + } + + public function getXmlElements() + { + $ret = []; + $elms = ['borderColor', 'negativeFillColor', 'negativeBorderColor']; + foreach ($elms as $elmKey) { + if (null !== $this->{$elmKey}) { + $ret[$elmKey] = ['rgb' => $this->{$elmKey}]; + } + } + foreach (array_filter($this->axisColor) as $attrKey => $axisColorAttr) { + if (!isset($ret['axisColor'])) { + $ret['axisColor'] = []; + } + $ret['axisColor'][$attrKey] = $axisColorAttr; + } + + return $ret; + } + + /** + * @return int + */ + public function getMinLength() + { + return $this->minLength; + } + + public function setMinLength(int $minLength): self + { + $this->minLength = $minLength; + + return $this; + } + + /** + * @return int + */ + public function getMaxLength() + { + return $this->maxLength; + } + + public function setMaxLength(int $maxLength): self + { + $this->maxLength = $maxLength; + + return $this; + } + + /** + * @return null|bool + */ + public function getBorder() + { + return $this->border; + } + + public function setBorder(bool $border): self + { + $this->border = $border; + + return $this; + } + + /** + * @return null|bool + */ + public function getGradient() + { + return $this->gradient; + } + + public function setGradient(bool $gradient): self + { + $this->gradient = $gradient; + + return $this; + } + + /** + * @return string + */ + public function getDirection() + { + return $this->direction; + } + + public function setDirection(string $direction): self + { + $this->direction = $direction; + + return $this; + } + + /** + * @return null|bool + */ + public function getNegativeBarBorderColorSameAsPositive() + { + return $this->negativeBarBorderColorSameAsPositive; + } + + public function setNegativeBarBorderColorSameAsPositive(bool $negativeBarBorderColorSameAsPositive): self + { + $this->negativeBarBorderColorSameAsPositive = $negativeBarBorderColorSameAsPositive; + + return $this; + } + + /** + * @return string + */ + public function getAxisPosition() + { + return $this->axisPosition; + } + + public function setAxisPosition(string $axisPosition): self + { + $this->axisPosition = $axisPosition; + + return $this; + } + + /** + * @return ConditionalFormatValueObject + */ + public function getMaximumConditionalFormatValueObject() + { + return $this->maximumConditionalFormatValueObject; + } + + public function setMaximumConditionalFormatValueObject(ConditionalFormatValueObject $maximumConditionalFormatValueObject) + { + $this->maximumConditionalFormatValueObject = $maximumConditionalFormatValueObject; + + return $this; + } + + /** + * @return ConditionalFormatValueObject + */ + public function getMinimumConditionalFormatValueObject() + { + return $this->minimumConditionalFormatValueObject; + } + + public function setMinimumConditionalFormatValueObject(ConditionalFormatValueObject $minimumConditionalFormatValueObject) + { + $this->minimumConditionalFormatValueObject = $minimumConditionalFormatValueObject; + + return $this; + } + + /** + * @return string + */ + public function getBorderColor() + { + return $this->borderColor; + } + + public function setBorderColor(string $borderColor): self + { + $this->borderColor = $borderColor; + + return $this; + } + + /** + * @return string + */ + public function getNegativeFillColor() + { + return $this->negativeFillColor; + } + + public function setNegativeFillColor(string $negativeFillColor): self + { + $this->negativeFillColor = $negativeFillColor; + + return $this; + } + + /** + * @return string + */ + public function getNegativeBorderColor() + { + return $this->negativeBorderColor; + } + + public function setNegativeBorderColor(string $negativeBorderColor): self + { + $this->negativeBorderColor = $negativeBorderColor; + + return $this; + } + + public function getAxisColor(): array + { + return $this->axisColor; + } + + /** + * @param mixed $rgb + * @param null|mixed $theme + * @param null|mixed $tint + */ + public function setAxisColor($rgb, $theme = null, $tint = null): self + { + $this->axisColor = [ + 'rgb' => $rgb, + 'theme' => $theme, + 'tint' => $tint, + ]; + + return $this; + } +} diff --git a/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormatValueObject.php b/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormatValueObject.php new file mode 100644 index 0000000000..c6370b86b8 --- /dev/null +++ b/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormatValueObject.php @@ -0,0 +1,80 @@ +type = $type; + $this->value = $value; + $this->cellFormula = $cellFormula; + } + + /** + * @return mixed + */ + public function getType() + { + return $this->type; + } + + /** + * @param mixed $type + */ + public function setType($type) + { + $this->type = $type; + + return $this; + } + + /** + * @return mixed + */ + public function getValue() + { + return $this->value; + } + + /** + * @param mixed $value + */ + public function setValue($value) + { + $this->value = $value; + + return $this; + } + + /** + * @return mixed + */ + public function getCellFormula() + { + return $this->cellFormula; + } + + /** + * @param mixed $cellFormula + */ + public function setCellFormula($cellFormula) + { + $this->cellFormula = $cellFormula; + + return $this; + } +} diff --git a/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormattingRuleExtension.php b/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormattingRuleExtension.php new file mode 100644 index 0000000000..943c734ba9 --- /dev/null +++ b/src/PhpSpreadsheet/Style/ConditionalFormatting/ConditionalFormattingRuleExtension.php @@ -0,0 +1,197 @@ + attributes */ + private $id; + + /** @var string Conditional Formatting Rule */ + private $cfRule; + + /** children */ + + /** @var ConditionalDataBarExtension */ + private $dataBar; + + /** @var string Sequence of References */ + private $sqref; + + /** + * ConditionalFormattingRuleExtension constructor. + * + * @param $id + */ + public function __construct($id = null, string $cfRule = self::CONDITION_EXTENSION_DATABAR) + { + if (null === $id) { + $this->id = '{' . $this->generateUuid() . '}'; + } else { + $this->id = $id; + } + $this->cfRule = $cfRule; + } + + private function generateUuid() + { + $chars = str_split('xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'); + + foreach ($chars as $i => $char) { + if ($char === 'x') { + $chars[$i] = dechex(random_int(0, 15)); + } elseif ($char === 'y') { + $chars[$i] = dechex(random_int(8, 11)); + } + } + + return implode('', $chars); + } + + public static function parseExtLstXml($extLstXml) + { + $conditionalFormattingRuleExtensions = []; + $conditionalFormattingRuleExtensionXml = null; + if ($extLstXml instanceof SimpleXMLElement) { + foreach ((count($extLstXml) > 0 ? $extLstXml : [$extLstXml]) as $extLst) { + //this uri is conditionalFormattings + //https://docs.microsoft.com/en-us/openspecs/office_standards/ms-xlsx/07d607af-5618-4ca2-b683-6a78dc0d9627 + if (isset($extLst->ext['uri']) && (string) $extLst->ext['uri'] === '{78C0D931-6437-407d-A8EE-F0AAD7539E65}') { + $conditionalFormattingRuleExtensionXml = $extLst->ext; + } + } + if ($conditionalFormattingRuleExtensionXml) { + $ns = $conditionalFormattingRuleExtensionXml->getNamespaces(true); + $extFormattingsXml = $conditionalFormattingRuleExtensionXml->children($ns['x14']); + + foreach ($extFormattingsXml->children($ns['x14']) as $extFormattingXml) { + $extCfRuleXml = $extFormattingXml->cfRule; + $extFormattingRuleObj = new self((string) $extCfRuleXml->attributes()->id); + $extFormattingRuleObj->setSqref((string) $extFormattingXml->children($ns['xm'])->sqref); + $conditionalFormattingRuleExtensions[$extFormattingRuleObj->getId()] = $extFormattingRuleObj; + + $extDataBarObj = new ConditionalDataBarExtension(); + $extFormattingRuleObj->setDataBarExt($extDataBarObj); + + $dataBarXml = $extCfRuleXml->dataBar; + self::parseExtDataBarAttributesFromXml($extDataBarObj, $dataBarXml); + self::parseExtDataBarElementChildrenFromXml($extDataBarObj, $dataBarXml, $ns); + } + } + } + + return $conditionalFormattingRuleExtensions; + } + + private static function parseExtDataBarAttributesFromXml(ConditionalDataBarExtension $extDataBarObj, SimpleXMLElement $dataBarXml): void + { + $dataBarAttribute = $dataBarXml->attributes(); + if ($dataBarAttribute->minLength) { + $extDataBarObj->setMinLength((int) $dataBarAttribute->minLength); + } + if ($dataBarAttribute->maxLength) { + $extDataBarObj->setMaxLength((int) $dataBarAttribute->maxLength); + } + if ($dataBarAttribute->border) { + $extDataBarObj->setBorder((bool) (string) $dataBarAttribute->border); + } + if ($dataBarAttribute->gradient) { + $extDataBarObj->setGradient((bool) (string) $dataBarAttribute->gradient); + } + if ($dataBarAttribute->direction) { + $extDataBarObj->setDirection((string) $dataBarAttribute->direction); + } + if ($dataBarAttribute->negativeBarBorderColorSameAsPositive) { + $extDataBarObj->setNegativeBarBorderColorSameAsPositive((bool) (string) $dataBarAttribute->negativeBarBorderColorSameAsPositive); + } + if ($dataBarAttribute->axisPosition) { + $extDataBarObj->setAxisPosition((string) $dataBarAttribute->axisPosition); + } + } + + private static function parseExtDataBarElementChildrenFromXml(ConditionalDataBarExtension $extDataBarObj, SimpleXMLElement $dataBarXml, $ns): void + { + if ($dataBarXml->borderColor) { + $extDataBarObj->setBorderColor((string) $dataBarXml->borderColor->attributes()['rgb']); + } + if ($dataBarXml->negativeFillColor) { + $extDataBarObj->setNegativeFillColor((string) $dataBarXml->negativeFillColor->attributes()['rgb']); + } + if ($dataBarXml->negativeBorderColor) { + $extDataBarObj->setNegativeBorderColor((string) $dataBarXml->negativeBorderColor->attributes()['rgb']); + } + if ($dataBarXml->axisColor) { + $axisColorAttr = $dataBarXml->axisColor->attributes(); + $extDataBarObj->setAxisColor((string) $axisColorAttr['rgb'], (string) $axisColorAttr['theme'], (string) $axisColorAttr['tint']); + } + $cfvoIndex = 0; + foreach ($dataBarXml->cfvo as $cfvo) { + $f = (string) $cfvo->children($ns['xm'])->f; + if ($cfvoIndex === 0) { + $extDataBarObj->setMinimumConditionalFormatValueObject(new ConditionalFormatValueObject((string) $cfvo->attributes()['type'], null, (empty($f) ? null : $f))); + } + if ($cfvoIndex === 1) { + $extDataBarObj->setMaximumConditionalFormatValueObject(new ConditionalFormatValueObject((string) $cfvo->attributes()['type'], null, (empty($f) ? null : $f))); + } + ++$cfvoIndex; + } + } + + /** + * @return mixed + */ + public function getId() + { + return $this->id; + } + + /** + * @param mixed $id + */ + public function setId($id): self + { + $this->id = $id; + + return $this; + } + + public function getCfRule(): string + { + return $this->cfRule; + } + + public function setCfRule(string $cfRule): self + { + $this->cfRule = $cfRule; + + return $this; + } + + public function getDataBarExt(): ConditionalDataBarExtension + { + return $this->dataBar; + } + + public function setDataBarExt(ConditionalDataBarExtension $dataBar): self + { + $this->dataBar = $dataBar; + + return $this; + } + + public function getSqref(): string + { + return $this->sqref; + } + + public function setSqref(string $sqref): self + { + $this->sqref = $sqref; + + return $this; + } +} diff --git a/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php b/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php index 8faa7ae259..7ad859ac6f 100644 --- a/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php +++ b/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php @@ -8,6 +8,8 @@ use PhpOffice\PhpSpreadsheet\Shared\StringHelper; use PhpOffice\PhpSpreadsheet\Shared\XMLWriter; use PhpOffice\PhpSpreadsheet\Style\Conditional; +use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\ConditionalDataBar; +use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\ConditionalFormattingRuleExtension; use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column; use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column\Rule; use PhpOffice\PhpSpreadsheet\Worksheet\SheetView; @@ -44,6 +46,7 @@ public function writeWorksheet(PhpspreadsheetWorksheet $pSheet, $pStringTable = $objWriter->writeAttribute('xmlns:xdr', 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing'); $objWriter->writeAttribute('xmlns:x14', 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main'); + $objWriter->writeAttribute('xmlns:xm', 'http://schemas.microsoft.com/office/excel/2006/main'); $objWriter->writeAttribute('xmlns:mc', 'http://schemas.openxmlformats.org/markup-compatibility/2006'); $objWriter->writeAttribute('mc:Ignorable', 'x14ac'); $objWriter->writeAttribute('xmlns:x14ac', 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac'); @@ -114,6 +117,10 @@ public function writeWorksheet(PhpspreadsheetWorksheet $pSheet, $pStringTable = // AlternateContent $this->writeAlternateContent($objWriter, $pSheet); + // ConditionalFormattingRuleExtensionList + // (Must be inserted last. Not insert last, an Excel parse error will occur) + $this->writeExtLst($objWriter, $pSheet); + $objWriter->endElement(); // Return @@ -503,6 +510,94 @@ private static function writeTextCondElements(XMLWriter $objWriter, Conditional } } + private static function writeExtConditionalFormattingElements(XMLWriter $objWriter, ConditionalFormattingRuleExtension $ruleExtension): void + { + $prefix = 'x14'; + $objWriter->startElementNs($prefix, 'conditionalFormatting', null); + + $objWriter->startElementNs($prefix, 'cfRule', null); + $objWriter->writeAttribute('type', $ruleExtension->getCfRule()); + $objWriter->writeAttribute('id', $ruleExtension->getId()); + $objWriter->startElementNs($prefix, 'dataBar', null); + $dataBar = $ruleExtension->getDataBarExt(); + foreach ($dataBar->getXmlAttributes() as $attrKey => $val) { + $objWriter->writeAttribute($attrKey, $val); + } + $minCfvo = $dataBar->getMinimumConditionalFormatValueObject(); + if ($minCfvo) { + $objWriter->startElementNs($prefix, 'cfvo', null); + $objWriter->writeAttribute('type', $minCfvo->getType()); + if ($minCfvo->getCellFormula()) { + $objWriter->writeElement('xm:f', $minCfvo->getCellFormula()); + } + $objWriter->endElement(); //end cfvo + } + + $maxCfvo = $dataBar->getMaximumConditionalFormatValueObject(); + if ($maxCfvo) { + $objWriter->startElementNs($prefix, 'cfvo', null); + $objWriter->writeAttribute('type', $maxCfvo->getType()); + if ($maxCfvo->getCellFormula()) { + $objWriter->writeElement('xm:f', $maxCfvo->getCellFormula()); + } + $objWriter->endElement(); //end cfvo + } + + foreach ($dataBar->getXmlElements() as $elmKey => $elmAttr) { + $objWriter->startElementNs($prefix, $elmKey, null); + foreach ($elmAttr as $attrKey => $attrVal) { + $objWriter->writeAttribute($attrKey, $attrVal); + } + $objWriter->endElement(); //end elmKey + } + $objWriter->endElement(); //end dataBar + $objWriter->endElement(); //end cfRule + $objWriter->writeElement('xm:sqref', $ruleExtension->getSqref()); + $objWriter->endElement(); //end conditionalFormatting + } + + private static function writeDataBarElements(XMLWriter $objWriter, $dataBar): void + { + /** @var ConditionalDataBar $dataBar */ + if ($dataBar) { + $objWriter->startElement('dataBar'); + self::writeAttributeIf($objWriter, null !== $dataBar->getShowValue(), 'showValue', $dataBar->getShowValue() ? '1' : '0'); + + $minCfvo = $dataBar->getMinimumConditionalFormatValueObject(); + if ($minCfvo) { + $objWriter->startElement('cfvo'); + self::writeAttributeIf($objWriter, $minCfvo->getType(), 'type', (string) $minCfvo->getType()); + self::writeAttributeIf($objWriter, $minCfvo->getValue(), 'val', (string) $minCfvo->getValue()); + $objWriter->endElement(); + } + $maxCfvo = $dataBar->getMaximumConditionalFormatValueObject(); + if ($maxCfvo) { + $objWriter->startElement('cfvo'); + self::writeAttributeIf($objWriter, $maxCfvo->getType(), 'type', (string) $maxCfvo->getType()); + self::writeAttributeIf($objWriter, $maxCfvo->getValue(), 'val', (string) $maxCfvo->getValue()); + $objWriter->endElement(); + } + if ($dataBar->getColor()) { + $objWriter->startElement('color'); + $objWriter->writeAttribute('rgb', $dataBar->getColor()); + $objWriter->endElement(); + } + $objWriter->endElement(); // end dataBar + + if ($dataBar->getConditionalFormattingRuleExt()) { + $objWriter->startElement('extLst'); + $extension = $dataBar->getConditionalFormattingRuleExt(); + $objWriter->startElement('ext'); + $objWriter->writeAttribute('uri', '{B025F937-C7B1-47D3-B67F-A62EFF666E3E}'); + $objWriter->startElementNs('x14', 'id', null); + $objWriter->text($extension->getId()); + $objWriter->endElement(); + $objWriter->endElement(); + $objWriter->endElement(); //end extLst + } + } + } + /** * Write ConditionalFormatting. * @@ -529,7 +624,12 @@ private function writeConditionalFormatting(XMLWriter $objWriter, Phpspreadsheet // cfRule $objWriter->startElement('cfRule'); $objWriter->writeAttribute('type', $conditional->getConditionType()); - $objWriter->writeAttribute('dxfId', $this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode($conditional->getHashCode())); + self::writeAttributeIf( + $objWriter, + ($conditional->getConditionType() != Conditional::CONDITION_DATABAR), + 'dxfId', + $this->getParentWriter()->getStylesConditionalHashTable()->getIndexForHashCode($conditional->getHashCode()) + ); $objWriter->writeAttribute('priority', $id++); self::writeAttributeif( @@ -548,7 +648,10 @@ private function writeConditionalFormatting(XMLWriter $objWriter, Phpspreadsheet self::writeOtherCondElements($objWriter, $conditional, $cellCoordinate); } - $objWriter->endElement(); + // + self::writeDataBarElements($objWriter, $conditional->getDataBar()); + + $objWriter->endElement(); //end cfRule $objWriter->endElement(); } @@ -1279,4 +1382,38 @@ private function writeAlternateContent(XMLWriter $objWriter, PhpspreadsheetWorks $objWriter->writeRaw($alternateContent); } } + + /** + * write + * only implementation conditionalFormattings. + * + * @url https://docs.microsoft.com/en-us/openspecs/office_standards/ms-xlsx/07d607af-5618-4ca2-b683-6a78dc0d9627 + */ + private function writeExtLst(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet): void + { + $conditionalFormattingRuleExtList = []; + foreach ($pSheet->getConditionalStylesCollection() as $cellCoordinate => $conditionalStyles) { + /** @var Conditional $conditional */ + foreach ($conditionalStyles as $conditional) { + $dataBar = $conditional->getDataBar(); + if ($dataBar && $dataBar->getConditionalFormattingRuleExt()) { + $conditionalFormattingRuleExtList[] = $dataBar->getConditionalFormattingRuleExt(); + } + } + } + + if (count($conditionalFormattingRuleExtList) > 0) { + $conditionalFormattingRuleExtNsPrefix = 'x14'; + $objWriter->startElement('extLst'); + $objWriter->startElement('ext'); + $objWriter->writeAttribute('uri', '{78C0D931-6437-407d-A8EE-F0AAD7539E65}'); + $objWriter->startElementNs($conditionalFormattingRuleExtNsPrefix, 'conditionalFormattings', null); + foreach ($conditionalFormattingRuleExtList as $extension) { + self::writeExtConditionalFormattingElements($objWriter, $extension); + } + $objWriter->endElement(); //end conditionalFormattings + $objWriter->endElement(); //end ext + $objWriter->endElement(); //end extLst + } + } } diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/ConditionalFormattingDataBarXlsxTest.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/ConditionalFormattingDataBarXlsxTest.php new file mode 100644 index 0000000000..60c5440b4d --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/ConditionalFormattingDataBarXlsxTest.php @@ -0,0 +1,325 @@ +load($filename); + $worksheet = $spreadsheet->getActiveSheet(); + + $this->pattern1Assertion($worksheet); + $this->pattern2Assertion($worksheet); + $this->pattern3Assertion($worksheet); + $this->pattern4Assertion($worksheet); + } + + public function testReloadXlsxConditionalFormattingDataBar(): void + { + // Make sure conditionals from existing file are maintained across save + $filename = 'tests/data/Reader/XLSX/conditionalFormattingDataBarTest.xlsx'; + $outfile = tempnam(File::sysGetTempDir(), 'phpspreadsheet-test'); + $reader = IOFactory::createReader('Xlsx'); + $spreadshee1 = $reader->load($filename); + $writer = IOFactory::createWriter($spreadshee1, 'Xlsx'); + $writer->save($outfile); + $spreadsheet = $reader->load($outfile); + unlink($outfile); + $worksheet = $spreadsheet->getActiveSheet(); + + $this->pattern1Assertion($worksheet); + $this->pattern2Assertion($worksheet); + $this->pattern3Assertion($worksheet); + $this->pattern4Assertion($worksheet); + } + + public function testNewXlsxConditionalFormattingDataBar(): void + { + // Make sure blanks/non-blanks added by PhpSpreadsheet are handled correctly + $outfile = tempnam(File::sysGetTempDir(), 'phpspreadsheet-test'); + $spreadshee1 = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); + $sheet = $spreadshee1->getActiveSheet(); + $sheet->setCellValue('A1', 1); + $sheet->setCellValue('A2', 2); + $sheet->setCellValue('A3', 3); + $sheet->setCellValue('A4', 4); + $sheet->setCellValue('A5', 5); + $cond1 = new Conditional(); + $cond1->setConditionType(Conditional::CONDITION_DATABAR); + $cond1->setDataBar(new ConditionalDataBar()); + $cond1->getDataBar() + ->setMinimumConditionalFormatValueObject(new ConditionalFormatValueObject('min')) + ->setMaximumConditionalFormatValueObject(new ConditionalFormatValueObject('max')) + ->setColor(Color::COLOR_GREEN); + $cond = [$cond1]; + $sheet->getStyle('A1:A5')->setConditionalStyles($cond); + $writer = IOFactory::createWriter($spreadshee1, 'Xlsx'); + $writer->save($outfile); + $reader = IOFactory::createReader('Xlsx'); + $spreadsheet = $reader->load($outfile); + unlink($outfile); + $worksheet = $spreadsheet->getActiveSheet(); + + $conditionalStyle = $worksheet->getConditionalStyles('A1:A5'); + self::assertNotEmpty($conditionalStyle); + /** @var Conditional $conditionalRule */ + $conditionalRule = $conditionalStyle[0]; + $conditions = $conditionalRule->getConditions(); + self::assertNotEmpty($conditions); + self::assertEquals(Conditional::CONDITION_DATABAR, $conditionalRule->getConditionType()); + self::assertNotEmpty($conditionalRule->getDataBar()); + + $dataBar = $conditionalRule->getDataBar(); + self::assertNotEmpty($dataBar->getMinimumConditionalFormatValueObject()); + self::assertNotEmpty($dataBar->getMaximumConditionalFormatValueObject()); + self::assertEquals('min', $dataBar->getMinimumConditionalFormatValueObject()->getType()); + self::assertEquals('max', $dataBar->getMaximumConditionalFormatValueObject()->getType()); + self::assertEquals(Color::COLOR_GREEN, $dataBar->getColor()); + } + + private function pattern1Assertion(Worksheet $worksheet): void + { + self::assertEquals( + "Type: Automatic, Automatic\nDirection: Automatic\nFills: Gradient\nAxis Position: Automatic", + $worksheet->getCell('A2')->getValue() + ); + + $conditionalStyle = $worksheet->getConditionalStyles('A3:A23'); + self::assertNotEmpty($conditionalStyle); + /** @var Conditional $conditionalRule */ + $conditionalRule = $conditionalStyle[0]; + $dataBar = $conditionalRule->getDataBar(); + + self::assertNotEmpty($dataBar); + self::assertEquals(Conditional::CONDITION_DATABAR, $conditionalRule->getConditionType()); + self::assertNotEmpty($dataBar->getMinimumConditionalFormatValueObject()); + self::assertNotEmpty($dataBar->getMaximumConditionalFormatValueObject()); + self::assertEquals('min', $dataBar->getMinimumConditionalFormatValueObject()->getType()); + self::assertEquals('max', $dataBar->getMaximumConditionalFormatValueObject()->getType()); + + self::assertEquals('FF638EC6', $dataBar->getColor()); + self::assertNotEmpty($dataBar->getConditionalFormattingRuleExt()); + //ext + $rule1ext = $dataBar->getConditionalFormattingRuleExt(); + self::assertEquals('{72C64AE0-5CD9-164F-83D1-AB720F263E79}', $rule1ext->getId()); + self::assertEquals('dataBar', $rule1ext->getCfRule()); + self::assertEquals('A3:A23', $rule1ext->getSqref()); + $extDataBar = $rule1ext->getDataBarExt(); + self::assertNotEmpty($extDataBar); + $pattern1 = [ + 'minLength' => 0, + 'maxLength' => 100, + 'border' => true, + 'gradient' => null, + 'direction' => null, + 'axisPosition' => null, + 'negativeBarBorderColorSameAsPositive' => false, + 'borderColor' => 'FF638EC6', + 'negativeFillColor' => 'FFFF0000', + 'negativeBorderColor' => 'FFFF0000', + ]; + foreach ($pattern1 as $key => $value) { + $funcName = 'get' . ucwords($key); + self::assertEquals($value, $extDataBar->$funcName(), __METHOD__ . '::' . $funcName . ' function patten'); + } + + self::assertNotEmpty($extDataBar->getMinimumConditionalFormatValueObject()); + self::assertNotEmpty($extDataBar->getMaximumConditionalFormatValueObject()); + self::assertEquals('autoMin', $extDataBar->getMinimumConditionalFormatValueObject()->getType()); + self::assertEquals('autoMax', $extDataBar->getMaximumConditionalFormatValueObject()->getType()); + + self::assertArrayHasKey('rgb', $extDataBar->getAxisColor()); + self::assertEquals('FF000000', $extDataBar->getAxisColor()['rgb']); + } + + private function pattern2Assertion(Worksheet $worksheet): void + { + self::assertEquals( + "Type: Number, Number\nValue: -5, 5\nDirection: Automatic\nFills: Solid\nAxis Position: Automatic", + $worksheet->getCell('B2')->getValue() + ); + + $conditionalStyle = $worksheet->getConditionalStyles('B3:B23'); + self::assertNotEmpty($conditionalStyle); + /** @var Conditional $conditionalRule */ + $conditionalRule = $conditionalStyle[0]; + $dataBar = $conditionalRule->getDataBar(); + + self::assertNotEmpty($dataBar); + self::assertEquals(Conditional::CONDITION_DATABAR, $conditionalRule->getConditionType()); + self::assertNotEmpty($dataBar->getMinimumConditionalFormatValueObject()); + self::assertNotEmpty($dataBar->getMaximumConditionalFormatValueObject()); + self::assertEquals('num', $dataBar->getMinimumConditionalFormatValueObject()->getType()); + self::assertEquals('num', $dataBar->getMaximumConditionalFormatValueObject()->getType()); + self::assertEquals('-5', $dataBar->getMinimumConditionalFormatValueObject()->getValue()); + self::assertEquals('5', $dataBar->getMaximumConditionalFormatValueObject()->getValue()); + self::assertEquals('FF63C384', $dataBar->getColor()); + self::assertNotEmpty($dataBar->getConditionalFormattingRuleExt()); + //ext + $rule1ext = $dataBar->getConditionalFormattingRuleExt(); + self::assertEquals('{98904F60-57F0-DF47-B480-691B20D325E3}', $rule1ext->getId()); + self::assertEquals('dataBar', $rule1ext->getCfRule()); + self::assertEquals('B3:B23', $rule1ext->getSqref()); + $extDataBar = $rule1ext->getDataBarExt(); + self::assertNotEmpty($extDataBar); + $pattern1 = [ + 'minLength' => 0, + 'maxLength' => 100, + 'border' => null, + 'gradient' => false, + 'direction' => null, + 'axisPosition' => null, + 'negativeBarBorderColorSameAsPositive' => null, + 'borderColor' => null, + 'negativeFillColor' => 'FFFF0000', + 'negativeBorderColor' => null, + ]; + foreach ($pattern1 as $key => $value) { + $funcName = 'get' . ucwords($key); + self::assertEquals($value, $extDataBar->$funcName(), $funcName . ' function patten'); + } + + self::assertNotEmpty($extDataBar->getMinimumConditionalFormatValueObject()); + self::assertNotEmpty($extDataBar->getMaximumConditionalFormatValueObject()); + self::assertEquals('num', $extDataBar->getMinimumConditionalFormatValueObject()->getType()); + self::assertEquals('num', $extDataBar->getMaximumConditionalFormatValueObject()->getType()); + self::assertEquals('-5', $extDataBar->getMinimumConditionalFormatValueObject()->getCellFormula()); + self::assertEquals('5', $extDataBar->getMaximumConditionalFormatValueObject()->getCellFormula()); + + self::assertArrayHasKey('rgb', $extDataBar->getAxisColor()); + self::assertEquals('FF000000', $extDataBar->getAxisColor()['rgb']); + } + + private function pattern3Assertion(Worksheet $worksheet): void + { + self::assertEquals( + "Type: Automatic, Automatic\nDirection: rightToLeft\nFills: Solid\nAxis Position: None", + $worksheet->getCell('C2')->getValue() + ); + + $conditionalStyle = $worksheet->getConditionalStyles('C3:C23'); + self::assertNotEmpty($conditionalStyle); + /** @var Conditional $conditionalRule */ + $conditionalRule = $conditionalStyle[0]; + $dataBar = $conditionalRule->getDataBar(); + + self::assertNotEmpty($dataBar); + self::assertEquals(Conditional::CONDITION_DATABAR, $conditionalRule->getConditionType()); + self::assertNotEmpty($dataBar->getMinimumConditionalFormatValueObject()); + self::assertNotEmpty($dataBar->getMaximumConditionalFormatValueObject()); + self::assertEquals('min', $dataBar->getMinimumConditionalFormatValueObject()->getType()); + self::assertEquals('max', $dataBar->getMaximumConditionalFormatValueObject()->getType()); + self::assertEmpty($dataBar->getMinimumConditionalFormatValueObject()->getValue()); + self::assertEmpty($dataBar->getMaximumConditionalFormatValueObject()->getValue()); + self::assertEquals('FFFF555A', $dataBar->getColor()); + self::assertNotEmpty($dataBar->getConditionalFormattingRuleExt()); + + //ext + $rule1ext = $dataBar->getConditionalFormattingRuleExt(); + self::assertEquals('{453C04BA-7ABD-8548-8A17-D9CFD2BDABE9}', $rule1ext->getId()); + self::assertEquals('dataBar', $rule1ext->getCfRule()); + self::assertEquals('C3:C23', $rule1ext->getSqref()); + $extDataBar = $rule1ext->getDataBarExt(); + self::assertNotEmpty($extDataBar); + $pattern1 = [ + 'minLength' => 0, + 'maxLength' => 100, + 'border' => null, + 'gradient' => false, + 'direction' => 'rightToLeft', + 'axisPosition' => 'none', + 'negativeBarBorderColorSameAsPositive' => null, + 'borderColor' => null, + 'negativeFillColor' => 'FFFF0000', + 'negativeBorderColor' => null, + ]; + foreach ($pattern1 as $key => $value) { + $funcName = 'get' . ucwords($key); + self::assertEquals($value, $extDataBar->$funcName(), $funcName . ' function patten'); + } + + self::assertNotEmpty($extDataBar->getMinimumConditionalFormatValueObject()); + self::assertNotEmpty($extDataBar->getMaximumConditionalFormatValueObject()); + self::assertEquals('autoMin', $extDataBar->getMinimumConditionalFormatValueObject()->getType()); + self::assertEquals('autoMax', $extDataBar->getMaximumConditionalFormatValueObject()->getType()); + self::assertEmpty($extDataBar->getMinimumConditionalFormatValueObject()->getCellFormula()); + self::assertEmpty($extDataBar->getMaximumConditionalFormatValueObject()->getCellFormula()); + + self::assertArrayHasKey('rgb', $extDataBar->getAxisColor()); + self::assertEmpty($extDataBar->getAxisColor()['rgb']); + } + + private function pattern4Assertion(Worksheet $worksheet): void + { + self::assertEquals( + "type: formula, formula\nValue: =2+3, =10+10\nDirection: leftToRight\nShowDataBarOnly\nFills: Solid\nBorder: Solid\nAxis Position: Midpoint", + $worksheet->getCell('D2')->getValue() + ); + + $conditionalStyle = $worksheet->getConditionalStyles('D3:D23'); + self::assertNotEmpty($conditionalStyle); + /** @var Conditional $conditionalRule */ + $conditionalRule = $conditionalStyle[0]; + $dataBar = $conditionalRule->getDataBar(); + + self::assertNotEmpty($dataBar); + self::assertEquals(Conditional::CONDITION_DATABAR, $conditionalRule->getConditionType()); + + self::assertTrue($dataBar->getShowValue()); + self::assertNotEmpty($dataBar->getMinimumConditionalFormatValueObject()); + self::assertNotEmpty($dataBar->getMaximumConditionalFormatValueObject()); + self::assertEquals('formula', $dataBar->getMinimumConditionalFormatValueObject()->getType()); + self::assertEquals('formula', $dataBar->getMaximumConditionalFormatValueObject()->getType()); + self::assertEquals('3+2', $dataBar->getMinimumConditionalFormatValueObject()->getValue()); + self::assertEquals('10+10', $dataBar->getMaximumConditionalFormatValueObject()->getValue()); + self::assertEquals('FFFF555A', $dataBar->getColor()); + self::assertNotEmpty($dataBar->getConditionalFormattingRuleExt()); + + //ext + $rule1ext = $dataBar->getConditionalFormattingRuleExt(); + self::assertEquals('{6C1E066A-E240-3D4A-98F8-8CC218B0DFD2}', $rule1ext->getId()); + self::assertEquals('dataBar', $rule1ext->getCfRule()); + self::assertEquals('D3:D23', $rule1ext->getSqref()); + $extDataBar = $rule1ext->getDataBarExt(); + self::assertNotEmpty($extDataBar); + $pattern1 = [ + 'minLength' => 0, + 'maxLength' => 100, + 'border' => true, + 'gradient' => false, + 'direction' => 'leftToRight', + 'axisPosition' => 'middle', + 'negativeBarBorderColorSameAsPositive' => null, + 'borderColor' => 'FF000000', + 'negativeFillColor' => 'FFFF0000', + 'negativeBorderColor' => null, + ]; + foreach ($pattern1 as $key => $value) { + $funcName = 'get' . ucwords($key); + self::assertEquals($value, $extDataBar->$funcName(), $funcName . ' function patten'); + } + + self::assertNotEmpty($extDataBar->getMaximumConditionalFormatValueObject()); + self::assertNotEmpty($extDataBar->getMinimumConditionalFormatValueObject()); + self::assertEquals('formula', $extDataBar->getMinimumConditionalFormatValueObject()->getType()); + self::assertEquals('formula', $extDataBar->getMaximumConditionalFormatValueObject()->getType()); + self::assertEquals('3+2', $extDataBar->getMinimumConditionalFormatValueObject()->getCellFormula()); + self::assertEquals('10+10', $extDataBar->getMaximumConditionalFormatValueObject()->getCellFormula()); + + self::assertArrayHasKey('rgb', $extDataBar->getAxisColor()); + self::assertEquals('FF000000', $extDataBar->getAxisColor()['rgb']); + } +} diff --git a/tests/data/Reader/XLSX/conditionalFormattingDataBarTest.xlsx b/tests/data/Reader/XLSX/conditionalFormattingDataBarTest.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f1434329f001a75621ca07f9e1ae7ec8b2a084db GIT binary patch literal 10443 zcmeHtg;!k3_I2Z~jT4+kgL`lZ1a}W1xJz*N;BE;J+-cmQad!(6AUFhfx9~AD@BL;b z^S-~}z1wTuT77Sw)3@UW zY@JMOo%Ge*?M)o@nB8ow$#Y<#>9PRO&;9>*{1?B0(!^nfZdT0K*KZ!gH<@IueP|9mQSjOTVD*lSOF$tWuw4nEVcfP?S4I4q}`5n*YUA_{9mMXoWN|VFg zC)qYfx<-zf_eRjmtiiFZ=u2ZO@Q^khQh83I>f-Q=5}m$SE5>%Ow_YCYbkPwPN_WlN zxaRsyx)~z=6aiD;07_O7wRmOhw&UJC!nnC|!zW$jOZT8P;ESFWV&mqFm{?;40!o{g ztNHyI5{i603;{lc1A~pc9g2rWFT89ECJ{DaU*A08Tw(1tpLd914t7vbdxspZ4(#%K z9!zZM1|FRz@A|U;ga-hgo?rk*>qv!Vtczj+85xSm;x#T1iu6@3GtQ1kJV{*F->l}k;$)K2>XQ;jGPM#{I< z=V54ZNg!%(fZ}SMvor!5ho7q6wJiA4-3Mm`1{#NC$q%J#JyQZnvzF0C;P z;KrhC*})Ym$*-ppRhZ+r^D&)Jv>O=;DM9DfC#dp!l{=kW=or9I3ot@Qh?DcQVKs{5~vzPzwqf|v+wucq773F6Lt81DIF4nvg3*~|O zJ_h1oE&U=51&7bY3Nb^op4O}^3yfW``|)VM%QYAJIt=i#ld&iq8`cA8easJMH+nt_ zgJ^hIMj9Xm2gE+u+Xo+_pr<+ln}p&AUS{C%{XF>DE(|_~I3OW`H}{}>r_`wLvr3Zql zOyp5In1B&L|V7As`}m{0dG*V!5cslBUC zEdfqe!@FpR&8l^)2$9doNTR5-7wjW95rh;Kv{bnwRtdn1mud)@g$+PbxjYakwO?~h zXoBo!{4}=vJ7(0%A+v+8m!NwDD;jsNL`;bQU`-Ax$&dmNscz|bVo10ovZkDm04ZY zY{ZKi`L~g45Ll3Y^>lviY~fs;`fUdiuo_ojrQ<-a)Jduh(y3&Xo>ZS_en*6EEyJj$ zBtOaJM3J!5-@A_B0W!R6Gx`}AX<_RSNX`cVxLmi>BCp4ulFu+QF*OP+GH1O-xkK!Q z3B$Qx7UG#XJxYDsw|V3qnJ|!6kP_Gm2#&)*07i!++3)_sH#3Y=iKarGKOyt$UdTSjh)v$GcdB50{c(*SaN7!Ho%xP8qsq zp@k5KF)ZKiIgFyGU_Iy99eBvNfdNvYpz`Ml82I%jh3!78!UoIv`j`DB1i{3Gy$86OOWmAky z^G74O^!EkYTz;H-MAg|0&WI_b61XDy;^Ds`Wi%J&HSYYwXT6}4PJT-JJ+iS7-s#f^ z<0~dC41J33>O2(|(CFOBVY4ZiP(7CAKTWvd*d64cR9mqR6)TxeR4qdAF=wHp_2OYd1|Ld007Yb zz^bE@yS0hqZ_|37`jX`$D^45P0ZGu2-V^m${CfzeJj_Ql_|f+b;Y_rKcWl-1e8doo z6@yBiZ%elDjGpOYnMP9e35`xpdY(X8sVUdC;|I{Ia#$(i64?Ud$VVy+DhAagwx-Ba z$n6NBp&Ah-M^{oF+wv4P87+&xME<;kM^(-=xnHbFq-GzE(HzrPT--bX6}Tk(ct)mB z|FU<@CfW3ZGWT!nc}`mV84(j2MF}D<*vJERF!sBoljuSXQ2J8lXSE2zoV?l+WfI^J zN|IJ+=}R8`(UtOD6)g7!g#+?+k{EcT{Ps%(%;;McT{olO#*@YZZY|#U?09sN947ft zs;ta7bz9%rV{gf%V&_{j$wvmx#!76_)>6Ef+Bf0}Q|V2Tgs+AbEn$jBT=?GD+SbmzPC@Wv@gXu!rSl3OhLzgak zePDPbK0>UD{UMcjqGH~`q+JsC1ftX@@)4xmH=rWjWpm)dvH&+AO}~v_-@Ux;S_ytJ zSoaypF{78jV@A@u0T$`7y3>jquRUV+z3Y3Mln3FLC1-*^Io?sJ;COj<&8r|=M$E#; z9@OvT()51Os9QoVKGQ%uIfmU;2)#0lD{CQG@p*E&zh~sMktJZ7jU=Xd!Y1t)DG~1w zOtUizkxmb9#SitAbgcei+9n)%YVa6rYRwezSk_>jD~E=)(S27}hSF|}rF7FAbmY&X zV}-XdZkC{#yF35VK6u%9=facINpj72FX-{>pwla2cYoKre2%FMwuwC?RM6^mKPaTC zP`9eACnAukFI`@|{RlB@X-fzhep!0QbF6gxR>4;!c+7qRC0%<5;j5^x1KwB{`t?az z;JBlAJ7IRR7caM*(%2@mCIr>FESCD45P8>iw(h@k znUlGRjS0)|XSUx^a-gjnLCk~W!*U^vdVX}ny)le!cfz%3%!8y&3yRUvy)xJ2V2^Jh zR)q$kd~Cx(w%C=GUAa?|fnlmm6!RSs6Jrt1kxH$S(itAjPn$~C>t2s*cf8pBlAFsR zrCA{uS?n6wME=s^c8d|T(mfa&CCzSgdmS7o)_ol$F-V}CyqetJ(bZo6c%`d3nH*^! zDHyBRgJ*dgmsnF~s2us8AdJyE7GO?b{$TxXCZcdBMgg{WB$y}Ph-VT;Qq9~rhg?<@aNjW#l^vC z!~A!hBv3Fxcp-HP|^eS+dt@%YBaFyEh}A>+PxTNTsY;f|^T_ZPe8 z$C*O+2f6y~KI;?9KXy8TFr*_tx}s#dxoV@LIGyw(Jj_rBV^Jof1JkYif62U_7u5bB1@J*i#~cf72_=2TMz0Y{vm%XE~I zfTIJAw6Wm|mK0{r0Hiw)rLF&fBqyU2gKmE3=pI)0$mauPBf{WJULr#1oyizUTT66G zD;d61KqcdF?K3&eanp|N?2Hs@m>(O;O(GE)9V~hFcV=~)CXYH!@lXyh@PEVA;)x{z z@9}j)dp4JAE5<=2v?w4kh1M{ct-Vb>H6qfHH#DOS9s3$PUG&>>`3<`}1F*}KO3-30 zyipFie&|$<_i44uVX@9G#b#^Kb8rn0*X*9CS6ge~BiY!_ikC29kNGwn64R;V7@sKu zpu3Z7MSC24nRCX}nYdktvsv##~+xAVZC940Xkzb3zc{<53n#8+u5 zLt{KjkT;8c0f+v?<|QWIt?!nwsc;$oAtGdPB{ zmf>7aq0_$P@gSvU7JQsz8-lAK{28Q5o3*G514MaPlO9;$gMG#v4dZU}NK@TYH8?^zbm;Jo>d4xvUIkt!ep%caTwOGZ0m=-6=OCp)aDRo(vayh7J zjd%WHv6vHNB2cpZqw39j+%54W2`4Kr$;Bns8 zTnWYZ(#VO@EyXM&RQ(OYo@gaIy-LF%08)mOWD^W-$xjxq6# zTi~sV9DkZuA?CJQ$kai;OieU-NxsB<_RWXJ0x7F;oJ+Qmbh3ppv1?!7u05znv64;XSM7Pf3du)UNQKrn1oC1Q1LW8858s)SFI6T;3kR|a! z{VS?3$!<#tWSe7BWv|GSo%7MXylrfkEo%bB-;fG63V%_huVq{tOQoW_n<5_IwCTWe zr>h~tYIAo~(D~_^UrFM`XwaZ!8T2TogeLP*@>@CHf`Jy(b+<$DT(Lkv;A_bbd~y{B z2=*UE@#lM6N%bKuF`pVZH6>p%vwQRDPxoAIc{i;$w~&>jxvx;gIxU0M;YTfNR2ezJ zhoTfa&O{$g8)oS*ESEg&Cia7)eyqkFlUUhLl)D7#v?~`SL6*dn80qh#OtVSV7!I?R zZ7%|^a!VuqlL~jKYT!O=o-h1-X4-#lD@UY8&Lf_wIQ@AgOYjF3|F*4kG&eDEa%B0v z`JInPv~4QVxN&|8Sv*0VI-jB0L1BYZI?xyL6jB##@8v=hvY^NOHVe}3R$Q$Susgn+ zG^DwJ>ycs(&k4vf=U%q8Z>G2um?Tvj7N;o&mrqg}EY^Nwxzrbu9GI&siH@-OQWd~_ zIbJ)}uJ3(6x}K7hSpt(^2ag?YSxmNf$D1ivvMF-j=wT?O(=ia8qXs3}veKfX`5 zif)`H*`P5&KmkQh=JThRf%g!-RHd$XRfPy0WO@s{xyq-#SW>X0PKE#_bIh<}A(f1l z4=h$1r|kZ?SW)@b;6uN6=a5@Mr>DLgtwOCVk}uPZ84o8k8S9pXN_F_*9&M~ZoF{49 zPiywH9%)94o1YkAZ0XX{K3sB2_1n~=IjBUsLG^NbgL1GWZ>OSG3`_3(#4mA+N5LYWn^rmj6KrLe7`NnE!YBRJW;S;s~&z?ZXBflE`BWM*dd9PJBgLBL(jDC6MKFLA+IMWa;9bwaKsK? zN~CW^-Rq6FhwZ20C0y5YscUD?hls+MfIkSZXQG}mLl!=yOdV%+f;2bWjD>#hfxwXu zBj!C!+Ifno5bX9z?{J75exN26ZmULZzG*|YaR4lK#cq$@t&g$@4S1z`lZDBfF9A#QHJ zet0*VX?&0?IhZiTlng_uXU+n8W;hy`t0F>9TLxz_@zcZyn&C8}y{7^?|`X zpG0RA?|kdTcJh5RXTWe?mWAve_t-c~EjViggIXsfqNS{Hn%@OM&*=oB&gm`gv$*!& zY9{{3;i=LQ`6#T|02UTRfhbgRPv9gFvg;vuP;s*|gZ4UZGY@ zwRB35lCtQ1UN3crx(PrQ^CT6@gC?a_W1v%LDo-~ma+$0xj983)VKCpSPb`vnseXHk=xOYwo8+lSO=!-p6H$vEF0U#v zu>t`(3nJ24VRXzx#|37}TBsHUr|0ZbiZ-V1MNngn`#i^o6*qN%4U%u?6(3xn$@(^y z(=*pwhg9+O(RzO>a0W{D%Wv=xY@5Jro3h#I=`nN91@FU~+wj3xhXJ!v$o$7xVKsy~ z5$O&YU;ZFC-c|h2q!=MHyo3IVq7RtonQ!eDcFe_(jKjW)2F@;=5g^IplgnN)5)iHY z&ZfbGVc+-m2tg+^dVx)7>P-9&p$Nl)K2%@=9&c$S-^bWQug{{)3Zdi44}fpBiKq-S zMQZ**{JT}A=q78un-KTF2zT7Rh~EcPy9j9CR>?Rl*q*e7nmYc+Yomy%Q*o(S1Z-y| zOtkA;IP~&4N6o8YloGG?4m`JF0n|9L z2J)yFwAO^6`Mw;5Ga?-FsEUS9s3Vb@a1C;N?D-69@BNBO@QqqcrZHtUQ5+H+S)8%h z0c+hVFqKKdBH6j%bsUs$qx6a*WYLtWf}gD|PhATA6XjN@b=KwMdhs9(^X*&CbWQfw zfSzn9V|2E7ng_dv^=zg47~9^q$cFD8`D91*NoJs|5U(~MSIUipAVDK=l*Cqb1hT8t zNpB`xbX753FfzT|!c7*wP%&FjFE4uol6=Ucd;27Hg&yEve%hU+G3IOYGK-+e;rr|P z5VS|Ak3xpN>@l9_M4oi^?X!$4Y3r?LZir6<%jY{wn(s1f8&br)<*}W)-VNkP9w^6Y z>CJ_XSQ;mFK~}yW3ZES5Tl`=@_qv#R(_g`GLOynl(t8zhIivp{_tND9;$W|5dEmoy zZW!ke0(Uewa4<1eb#kzclzud|XvW23KiFOLD zI?JLClp^mjyEN8oji2>C9+w7gmaWNg*FT-ljwI?KHTYF8!(8KU5-1joaNGo0KXz7k z_BZr9nOt}f9~0QXT`>+btIuS!UvN~N=+pTAN8x9w?WdRB^BtGx>>$>&@MCOeq~u^{ z@5o|g=V0=$l7;{2J;E+iE0rr=(%renrup5}M@LYi>sTqspHO*IlNGtjtT>%~ymS2ZL-EDLz_nS`Ffd}nEE)jcF`Zr3m@24nl`mID|&&@>3 z4){zAKQ*OU09`Yg+^CMeqa++ezE-XccOmKCqP_7EXfBqz1gal~!-P|H($95R7i@r` z6L|tQmDzFE1haJvhayQJ-ikoX?cv6^6~mWS&gDX_4wuU1%R@7oO+GOvb~RQi8}S#2^)0t50nzF`JRSkk-{w6$Ne z4P0Xy;d-2px-+qVQDR`~;O+D{9N~xajV*WKs4eagz7o^Y8`LE+ke3k7YD`xOD zv^#>oryL(rKvxz4jzSjr$lL#gi_DBm2UtwJ0#B9CH| z#pA{+r8(mm%Ppz$=asIOm)R17Nt~+uQC?EpWmQN@T-!5#_7J}jJdv!GaTiEI{KAas zvBF|ktskFELpRee|7N{)5}9sEW!VDvtrM<^YgR1?fB#@#G8@b5I}P?W_KeX)ZBoqXQ`?ZY%u0JZh6Ob5WG@V2fc*-66R8(n^BJH2U@qTqynIHme~;w9+y78RrX>4!2Y)Yc`M2S3?WbqB{H5IGSHr)H{(m)Wd9I}S|Ca##>gQJ_ z_)kyA&)V=Wy6~^Yze-bo8mFQDZv3ZE^{eTxS^GatA*3VLU&^KbAkgdiXmD|7i~Z)R6-K|Dfbw&Hp|-{?%NU>M!R1 Znk$uL;hskq06>2J_&u{e7tL?q{vS<{lUx7* literal 0 HcmV?d00001