ConditionalTextTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Functional;
  3. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  4. use PhpOffice\PhpSpreadsheet\Style\Conditional;
  5. use PhpOffice\PhpSpreadsheet\Style\Fill;
  6. class ConditionalTextTest extends AbstractFunctional
  7. {
  8. const COLOR_GREEN = 'FF99FF66';
  9. const COLOR_RED = 'FFFF5050';
  10. const COLOR_BLUE = 'FF5050FF';
  11. const COLOR_YELLOW = 'FFFFFF50';
  12. public function testConditionalText(): void
  13. {
  14. $format = 'Xlsx';
  15. $spreadsheet = new Spreadsheet();
  16. $conditionalStyles = [];
  17. // if text contains 'anywhere' - red background
  18. $condition0 = new Conditional();
  19. $condition0->setConditionType(Conditional::CONDITION_CONTAINSTEXT);
  20. $condition0->setOperatorType(Conditional::CONDITION_CONTAINSTEXT);
  21. $condition0->setText('anywhere');
  22. $condition0->getStyle()->getFill()
  23. ->setFillType(Fill::FILL_SOLID)
  24. ->getEndColor()->setARGB(self::COLOR_RED);
  25. array_push($conditionalStyles, $condition0);
  26. // if text contains 'Left' on left - green background
  27. $condition1 = new Conditional();
  28. $condition1->setConditionType(Conditional::CONDITION_CONTAINSTEXT);
  29. $condition1->setOperatorType(Conditional::OPERATOR_BEGINSWITH);
  30. $condition1->setText('Left');
  31. $condition1->getStyle()->getFill()
  32. ->setFillType(Fill::FILL_SOLID)
  33. ->getEndColor()->setARGB(self::COLOR_GREEN);
  34. array_push($conditionalStyles, $condition1);
  35. // if text contains 'right' on right - blue background
  36. $condition2 = new Conditional();
  37. $condition2->setConditionType(Conditional::CONDITION_CONTAINSTEXT);
  38. $condition2->setOperatorType(Conditional::OPERATOR_ENDSWITH);
  39. $condition2->setText('right');
  40. $condition2->getStyle()->getFill()
  41. ->setFillType(Fill::FILL_SOLID)
  42. ->getEndColor()->setARGB(self::COLOR_BLUE);
  43. array_push($conditionalStyles, $condition2);
  44. // if text contains no spaces - yellow background
  45. $condition3 = new Conditional();
  46. $condition3->setConditionType(Conditional::CONDITION_CONTAINSTEXT);
  47. $condition3->setOperatorType(Conditional::OPERATOR_NOTCONTAINS);
  48. $condition3->setText(' ');
  49. $condition3->getStyle()->getFill()
  50. ->setFillType(Fill::FILL_SOLID)
  51. ->getEndColor()->setARGB(self::COLOR_YELLOW);
  52. array_push($conditionalStyles, $condition3);
  53. $sheet = $spreadsheet->getActiveSheet();
  54. $sheet->setCellValue('B1', 'This should match anywhere, right?');
  55. $sheet->setCellValue('B2', 'This should match nowhere, right?');
  56. $sheet->setCellValue('B3', 'Left match');
  57. $sheet->setCellValue('B4', 'Match on right');
  58. $sheet->setCellValue('B5', 'nospaces');
  59. $xpCoordinate = 'B1:B5';
  60. $spreadsheet->getActiveSheet()->setConditionalStyles($xpCoordinate, $conditionalStyles);
  61. $sheet->getColumnDimension('B')->setAutoSize(true);
  62. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format);
  63. // see if we successfully written conditional text elements
  64. $newConditionalStyles = $reloadedSpreadsheet->getActiveSheet()->getConditionalStyles($xpCoordinate);
  65. $cnt = count($conditionalStyles);
  66. for ($i = 0; $i < $cnt; ++$i) {
  67. self::assertEquals(
  68. $conditionalStyles[$i]->getConditionType(),
  69. $newConditionalStyles[$i]->getConditionType(),
  70. "Failure on condition type $i"
  71. );
  72. self::assertEquals(
  73. $conditionalStyles[$i]->getOperatorType(),
  74. $newConditionalStyles[$i]->getOperatorType(),
  75. "Failure on operator type $i"
  76. );
  77. self::assertEquals(
  78. $conditionalStyles[$i]->getText(),
  79. $newConditionalStyles[$i]->getText(),
  80. "Failure on text $i"
  81. );
  82. $filCond = $conditionalStyles[$i]->getStyle()->getFill();
  83. $newCond = $newConditionalStyles[$i]->getStyle()->getFill();
  84. self::assertEquals(
  85. $filCond->getFillType(),
  86. $newCond->getFillType(),
  87. "Failure on fill type $i"
  88. );
  89. self::assertEquals(
  90. $filCond->getEndColor()->getARGB(),
  91. $newCond->getEndColor()->getARGB(),
  92. "Failure on end color $i"
  93. );
  94. }
  95. }
  96. }