Xlsx2Test.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
  3. use PhpOffice\PhpSpreadsheet\IOFactory;
  4. use PhpOffice\PhpSpreadsheet\Shared\File;
  5. use PhpOffice\PhpSpreadsheet\Style\Color;
  6. use PhpOffice\PhpSpreadsheet\Style\Conditional;
  7. use PhpOffice\PhpSpreadsheet\Style\Fill;
  8. use PHPUnit\Framework\TestCase;
  9. class Xlsx2Test extends TestCase
  10. {
  11. public function testLoadXlsxConditionalFormatting2(): void
  12. {
  13. // Make sure Conditionals are read correctly from existing file
  14. $filename = 'tests/data/Reader/XLSX/conditionalFormatting2Test.xlsx';
  15. $reader = IOFactory::createReader('Xlsx');
  16. $spreadsheet = $reader->load($filename);
  17. $worksheet = $spreadsheet->getActiveSheet();
  18. $conditionalStyle = $worksheet->getConditionalStyles('A2:A8');
  19. self::assertNotEmpty($conditionalStyle);
  20. $conditionalRule = $conditionalStyle[0];
  21. $conditions = $conditionalRule->getConditions();
  22. self::assertNotEmpty($conditions);
  23. self::assertEquals(Conditional::CONDITION_NOTCONTAINSBLANKS, $conditionalRule->getConditionType());
  24. self::assertEquals('LEN(TRIM(A2))>0', $conditions[0]);
  25. $conditionalStyle = $worksheet->getConditionalStyles('B2:B8');
  26. self::assertNotEmpty($conditionalStyle);
  27. $conditionalRule = $conditionalStyle[0];
  28. $conditions = $conditionalRule->getConditions();
  29. self::assertNotEmpty($conditions);
  30. self::assertEquals(Conditional::CONDITION_CONTAINSBLANKS, $conditionalRule->getConditionType());
  31. self::assertEquals('LEN(TRIM(B2))=0', $conditions[0]);
  32. $conditionalStyle = $worksheet->getConditionalStyles('C2:C8');
  33. self::assertNotEmpty($conditionalStyle);
  34. $conditionalRule = $conditionalStyle[0];
  35. $conditions = $conditionalRule->getConditions();
  36. self::assertNotEmpty($conditions);
  37. self::assertEquals(Conditional::CONDITION_CELLIS, $conditionalRule->getConditionType());
  38. self::assertEquals(Conditional::OPERATOR_GREATERTHAN, $conditionalRule->getOperatorType());
  39. self::assertEquals('5', $conditions[0]);
  40. }
  41. public function testReloadXlsxConditionalFormatting2(): void
  42. {
  43. // Make sure conditionals from existing file are maintained across save
  44. $filename = 'tests/data/Reader/XLSX/conditionalFormatting2Test.xlsx';
  45. $outfile = File::temporaryFilename();
  46. $reader = IOFactory::createReader('Xlsx');
  47. $spreadshee1 = $reader->load($filename);
  48. $writer = IOFactory::createWriter($spreadshee1, 'Xlsx');
  49. $writer->save($outfile);
  50. $spreadsheet = $reader->load($outfile);
  51. unlink($outfile);
  52. $worksheet = $spreadsheet->getActiveSheet();
  53. $conditionalStyle = $worksheet->getConditionalStyles('A2:A8');
  54. self::assertNotEmpty($conditionalStyle);
  55. $conditionalRule = $conditionalStyle[0];
  56. $conditions = $conditionalRule->getConditions();
  57. self::assertNotEmpty($conditions);
  58. self::assertEquals(Conditional::CONDITION_NOTCONTAINSBLANKS, $conditionalRule->getConditionType());
  59. self::assertEquals('LEN(TRIM(A2))>0', $conditions[0]);
  60. $conditionalStyle = $worksheet->getConditionalStyles('B2:B8');
  61. self::assertNotEmpty($conditionalStyle);
  62. $conditionalRule = $conditionalStyle[0];
  63. $conditions = $conditionalRule->getConditions();
  64. self::assertNotEmpty($conditions);
  65. self::assertEquals(Conditional::CONDITION_CONTAINSBLANKS, $conditionalRule->getConditionType());
  66. self::assertEquals('LEN(TRIM(B2))=0', $conditions[0]);
  67. $conditionalStyle = $worksheet->getConditionalStyles('C2:C8');
  68. self::assertNotEmpty($conditionalStyle);
  69. $conditionalRule = $conditionalStyle[0];
  70. $conditions = $conditionalRule->getConditions();
  71. self::assertNotEmpty($conditions);
  72. self::assertEquals(Conditional::CONDITION_CELLIS, $conditionalRule->getConditionType());
  73. self::assertEquals(Conditional::OPERATOR_GREATERTHAN, $conditionalRule->getOperatorType());
  74. self::assertEquals('5', $conditions[0]);
  75. }
  76. public function testNewXlsxConditionalFormatting2(): void
  77. {
  78. // Make sure blanks/non-blanks added by PhpSpreadsheet are handled correctly
  79. $outfile = File::temporaryFilename();
  80. $spreadshee1 = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
  81. $sheet = $spreadshee1->getActiveSheet();
  82. $sheet->setCellValue('A2', 'a2');
  83. $sheet->setCellValue('A4', 'a4');
  84. $sheet->setCellValue('A6', 'a6');
  85. $cond1 = new Conditional();
  86. $cond1->setConditionType(Conditional::CONDITION_CONTAINSBLANKS);
  87. $cond1->getStyle()->getFill()->setFillType(Fill::FILL_SOLID);
  88. $cond1->getStyle()->getFill()->getEndColor()->setARGB(Color::COLOR_RED);
  89. $cond = [$cond1];
  90. $sheet->getStyle('A1:A6')->setConditionalStyles($cond);
  91. $writer = IOFactory::createWriter($spreadshee1, 'Xlsx');
  92. $writer->save($outfile);
  93. $reader = IOFactory::createReader('Xlsx');
  94. $spreadsheet = $reader->load($outfile);
  95. unlink($outfile);
  96. $worksheet = $spreadsheet->getActiveSheet();
  97. $conditionalStyle = $worksheet->getConditionalStyles('A1:A6');
  98. self::assertNotEmpty($conditionalStyle);
  99. $conditionalRule = $conditionalStyle[0];
  100. $conditions = $conditionalRule->getConditions();
  101. self::assertNotEmpty($conditions);
  102. self::assertEquals(Conditional::CONDITION_CONTAINSBLANKS, $conditionalRule->getConditionType());
  103. self::assertEquals('LEN(TRIM(A1))=0', $conditions[0]);
  104. }
  105. }