108 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			108 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | 
 | ||
|  | namespace PhpOffice\PhpSpreadsheetTests\Functional; | ||
|  | 
 | ||
|  | use PhpOffice\PhpSpreadsheet\Spreadsheet; | ||
|  | use PhpOffice\PhpSpreadsheet\Style\Conditional; | ||
|  | use PhpOffice\PhpSpreadsheet\Style\Fill; | ||
|  | 
 | ||
|  | class ConditionalTextTest extends AbstractFunctional | ||
|  | { | ||
|  |     const COLOR_GREEN = 'FF99FF66'; | ||
|  |     const COLOR_RED = 'FFFF5050'; | ||
|  |     const COLOR_BLUE = 'FF5050FF'; | ||
|  |     const COLOR_YELLOW = 'FFFFFF50'; | ||
|  | 
 | ||
|  |     public function testConditionalText(): void | ||
|  |     { | ||
|  |         $format = 'Xlsx'; | ||
|  |         $spreadsheet = new Spreadsheet(); | ||
|  | 
 | ||
|  |         $conditionalStyles = []; | ||
|  |         // if text contains 'anywhere' - red background
 | ||
|  |         $condition0 = new Conditional(); | ||
|  |         $condition0->setConditionType(Conditional::CONDITION_CONTAINSTEXT); | ||
|  |         $condition0->setOperatorType(Conditional::CONDITION_CONTAINSTEXT); | ||
|  |         $condition0->setText('anywhere'); | ||
|  |         $condition0->getStyle()->getFill() | ||
|  |             ->setFillType(Fill::FILL_SOLID) | ||
|  |             ->getEndColor()->setARGB(self::COLOR_RED); | ||
|  |         array_push($conditionalStyles, $condition0); | ||
|  | 
 | ||
|  |         // if text contains 'Left' on left - green background
 | ||
|  |         $condition1 = new Conditional(); | ||
|  |         $condition1->setConditionType(Conditional::CONDITION_CONTAINSTEXT); | ||
|  |         $condition1->setOperatorType(Conditional::OPERATOR_BEGINSWITH); | ||
|  |         $condition1->setText('Left'); | ||
|  |         $condition1->getStyle()->getFill() | ||
|  |             ->setFillType(Fill::FILL_SOLID) | ||
|  |             ->getEndColor()->setARGB(self::COLOR_GREEN); | ||
|  |         array_push($conditionalStyles, $condition1); | ||
|  | 
 | ||
|  |         // if text contains 'right' on right - blue background
 | ||
|  |         $condition2 = new Conditional(); | ||
|  |         $condition2->setConditionType(Conditional::CONDITION_CONTAINSTEXT); | ||
|  |         $condition2->setOperatorType(Conditional::OPERATOR_ENDSWITH); | ||
|  |         $condition2->setText('right'); | ||
|  |         $condition2->getStyle()->getFill() | ||
|  |             ->setFillType(Fill::FILL_SOLID) | ||
|  |             ->getEndColor()->setARGB(self::COLOR_BLUE); | ||
|  |         array_push($conditionalStyles, $condition2); | ||
|  | 
 | ||
|  |         // if text contains no spaces - yellow background
 | ||
|  |         $condition3 = new Conditional(); | ||
|  |         $condition3->setConditionType(Conditional::CONDITION_CONTAINSTEXT); | ||
|  |         $condition3->setOperatorType(Conditional::OPERATOR_NOTCONTAINS); | ||
|  |         $condition3->setText(' '); | ||
|  |         $condition3->getStyle()->getFill() | ||
|  |             ->setFillType(Fill::FILL_SOLID) | ||
|  |             ->getEndColor()->setARGB(self::COLOR_YELLOW); | ||
|  |         array_push($conditionalStyles, $condition3); | ||
|  |         $sheet = $spreadsheet->getActiveSheet(); | ||
|  |         $sheet->setCellValue('B1', 'This should match anywhere, right?'); | ||
|  |         $sheet->setCellValue('B2', 'This should match nowhere, right?'); | ||
|  |         $sheet->setCellValue('B3', 'Left match'); | ||
|  |         $sheet->setCellValue('B4', 'Match on right'); | ||
|  |         $sheet->setCellValue('B5', 'nospaces'); | ||
|  |         $xpCoordinate = 'B1:B5'; | ||
|  | 
 | ||
|  |         $spreadsheet->getActiveSheet()->setConditionalStyles($xpCoordinate, $conditionalStyles); | ||
|  |         $sheet->getColumnDimension('B')->setAutoSize(true); | ||
|  | 
 | ||
|  |         $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format); | ||
|  | 
 | ||
|  |         // see if we successfully written conditional text elements
 | ||
|  |         $newConditionalStyles = $reloadedSpreadsheet->getActiveSheet()->getConditionalStyles($xpCoordinate); | ||
|  |         $cnt = count($conditionalStyles); | ||
|  |         for ($i = 0; $i < $cnt; ++$i) { | ||
|  |             self::assertEquals( | ||
|  |                 $conditionalStyles[$i]->getConditionType(), | ||
|  |                 $newConditionalStyles[$i]->getConditionType(), | ||
|  |                 "Failure on condition type $i" | ||
|  |             ); | ||
|  |             self::assertEquals( | ||
|  |                 $conditionalStyles[$i]->getOperatorType(), | ||
|  |                 $newConditionalStyles[$i]->getOperatorType(), | ||
|  |                 "Failure on operator type $i" | ||
|  |             ); | ||
|  |             self::assertEquals( | ||
|  |                 $conditionalStyles[$i]->getText(), | ||
|  |                 $newConditionalStyles[$i]->getText(), | ||
|  |                 "Failure on text $i" | ||
|  |             ); | ||
|  |             $filCond = $conditionalStyles[$i]->getStyle()->getFill(); | ||
|  |             $newCond = $newConditionalStyles[$i]->getStyle()->getFill(); | ||
|  |             self::assertEquals( | ||
|  |                 $filCond->getFillType(), | ||
|  |                 $newCond->getFillType(), | ||
|  |                 "Failure on fill type $i" | ||
|  |             ); | ||
|  |             self::assertEquals( | ||
|  |                 $filCond->getEndColor()->getARGB(), | ||
|  |                 $newCond->getEndColor()->getARGB(), | ||
|  |                 "Failure on end color $i" | ||
|  |             ); | ||
|  |         } | ||
|  |     } | ||
|  | } |