| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336 |
- <?php
- namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
- use PhpOffice\PhpSpreadsheet\IOFactory;
- use PhpOffice\PhpSpreadsheet\Shared\File;
- use PhpOffice\PhpSpreadsheet\Style\Color;
- use PhpOffice\PhpSpreadsheet\Style\Conditional;
- use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\ConditionalDataBar;
- use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\ConditionalFormatValueObject;
- use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
- use PHPUnit\Framework\TestCase;
- class ConditionalFormattingDataBarXlsxTest extends TestCase
- {
- public function testLoadXlsxConditionalFormattingDataBar(): void
- {
- // Make sure Conditionals are read correctly from existing file
- $filename = 'tests/data/Reader/XLSX/conditionalFormattingDataBarTest.xlsx';
- $reader = IOFactory::createReader('Xlsx');
- $spreadsheet = $reader->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 = File::temporaryFilename();
- $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 = File::temporaryFilename();
- $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());
- $dataBar = $cond1->getDataBar();
- self::assertNotNull($dataBar);
- $dataBar
- ->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::assertNotNull($dataBar);
- self::assertNotNull($dataBar->getMinimumConditionalFormatValueObject());
- self::assertNotNull($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::assertNotNull($dataBar);
- self::assertNotNull($dataBar->getMinimumConditionalFormatValueObject());
- self::assertNotNull($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::assertNotNull($rule1ext);
- 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::assertNotNull($dataBar);
- self::assertNotNull($dataBar->getMinimumConditionalFormatValueObject());
- self::assertNotNull($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::assertNotNull($rule1ext);
- 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::assertNotNull($dataBar);
- self::assertNotNull($dataBar->getMinimumConditionalFormatValueObject());
- self::assertNotNull($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::assertNotNull($rule1ext);
- 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::assertNotNull($dataBar);
- self::assertTrue($dataBar->getShowValue());
- self::assertNotNull($dataBar->getMinimumConditionalFormatValueObject());
- self::assertNotNull($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::assertNotNull($rule1ext);
- 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']);
- }
- }
|