From a75769299206f15389e1701132bcc1e9bb3a42f6 Mon Sep 17 00:00:00 2001 From: xandros15 Date: Sun, 2 May 2021 22:09:38 +0200 Subject: [PATCH] #984 add support notContainsText for conditional styles in xlsx reader --- .../Reader/Xlsx/ConditionalStyles.php | 1 + .../Reader/Xlsx/ConditionalTest.php | 31 ++++++++++++++++++ .../XLSX/conditionalFormatting3Test.xlsx | Bin 0 -> 9486 bytes 3 files changed, 32 insertions(+) create mode 100644 tests/PhpSpreadsheetTests/Reader/Xlsx/ConditionalTest.php create mode 100644 tests/data/Reader/XLSX/conditionalFormatting3Test.xlsx diff --git a/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php b/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php index 5f6cb4dc..80361371 100644 --- a/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php +++ b/src/PhpSpreadsheet/Reader/Xlsx/ConditionalStyles.php @@ -45,6 +45,7 @@ class ConditionalStyles || (string) $cfRule['type'] == Conditional::CONDITION_CONTAINSTEXT || (string) $cfRule['type'] == Conditional::CONDITION_CONTAINSBLANKS || (string) $cfRule['type'] == Conditional::CONDITION_NOTCONTAINSBLANKS + || (string) $cfRule['type'] == Conditional::CONDITION_NOTCONTAINSTEXT || (string) $cfRule['type'] == Conditional::CONDITION_EXPRESSION) && isset($this->dxfs[(int) ($cfRule['dxfId'])]) ) { diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/ConditionalTest.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/ConditionalTest.php new file mode 100644 index 00000000..6ee7bc37 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/ConditionalTest.php @@ -0,0 +1,31 @@ +load($filename); + $worksheet = $spreadsheet->getActiveSheet(); + $styles = $worksheet->getConditionalStyles('A1:A5'); + + $this->assertCount(1, $styles); + + /** @var $notContainsTextStyle Conditional */ + $notContainsTextStyle = $styles[0]; + $this->assertEquals('A', $notContainsTextStyle->getText()); + $this->assertEquals(Conditional::CONDITION_NOTCONTAINSTEXT, $notContainsTextStyle->getConditionType()); + $this->assertEquals(Conditional::OPERATOR_NOTCONTAINS, $notContainsTextStyle->getOperatorType()); + } +} diff --git a/tests/data/Reader/XLSX/conditionalFormatting3Test.xlsx b/tests/data/Reader/XLSX/conditionalFormatting3Test.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ee23e21c8c5d9a6c1cf5b819de6a30954d0bad5c GIT binary patch literal 9486 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 BGW`Gm literal 0 HcmV?d00001