07_Expression_Comparisons.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  3. use PhpOffice\PhpSpreadsheet\Style\Color;
  4. use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\Wizard;
  5. use PhpOffice\PhpSpreadsheet\Style\Fill;
  6. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  7. use PhpOffice\PhpSpreadsheet\Style\Style;
  8. require __DIR__ . '/../Header.php';
  9. // Create new Spreadsheet object
  10. $helper->log('Create new Spreadsheet object');
  11. $spreadsheet = new Spreadsheet();
  12. // Set document properties
  13. $helper->log('Set document properties');
  14. $spreadsheet->getProperties()->setCreator('Mark Baker')
  15. ->setLastModifiedBy('Mark Baker')
  16. ->setTitle('PhpSpreadsheet Test Document')
  17. ->setSubject('PhpSpreadsheet Test Document')
  18. ->setDescription('Test document for PhpSpreadsheet, generated using PHP classes.')
  19. ->setKeywords('office PhpSpreadsheet php')
  20. ->setCategory('Test result file');
  21. // Create the worksheet
  22. $helper->log('Add data');
  23. $spreadsheet->setActiveSheetIndex(0);
  24. $spreadsheet->getActiveSheet()
  25. ->setCellValue('A1', 'Odd/Even Expression Comparison')
  26. ->setCellValue('A4', 'Note that these functions are not available for Xls files')
  27. ->setCellValue('A15', 'Sales Grid Expression Comparison')
  28. ->setCellValue('A25', 'Sales Grid Multiple Expression Comparison');
  29. $dataArray = [
  30. [1, 0, 3],
  31. [2, 1, 1],
  32. [3, 1, 4],
  33. [4, 2, 1],
  34. [5, 3, 5],
  35. [6, 5, 9],
  36. [7, 8, 2],
  37. [8, 13, 6],
  38. [9, 21, 5],
  39. [10, 34, 4],
  40. ];
  41. $salesGrid = [
  42. ['Name', 'Sales', 'Country', 'Quarter'],
  43. ['Smith', 16753, 'UK', 'Q3'],
  44. ['Johnson', 14808, 'USA', 'Q4'],
  45. ['Williams', 10644, 'UK', 'Q2'],
  46. ['Jones', 1390, 'USA', 'Q3'],
  47. ['Brown', 4865, 'USA', 'Q4'],
  48. ['Williams', 12438, 'UK', 'Q2'],
  49. ];
  50. $spreadsheet->getActiveSheet()
  51. ->fromArray($dataArray, null, 'A2', true);
  52. $spreadsheet->getActiveSheet()
  53. ->fromArray($salesGrid, null, 'A16', true);
  54. $spreadsheet->getActiveSheet()
  55. ->fromArray($salesGrid, null, 'A26', true);
  56. // Set title row bold
  57. $helper->log('Set title row bold');
  58. $spreadsheet->getActiveSheet()->getStyle('A1:B1')->getFont()->setBold(true);
  59. $spreadsheet->getActiveSheet()->getStyle('A15:D16')->getFont()->setBold(true);
  60. $spreadsheet->getActiveSheet()->getStyle('A25:D26')->getFont()->setBold(true);
  61. // Define some styles for our Conditionals
  62. $helper->log('Define some styles for our Conditionals');
  63. $yellowStyle = new Style(false, true);
  64. $yellowStyle->getFill()
  65. ->setFillType(Fill::FILL_SOLID)
  66. ->getEndColor()->setARGB(Color::COLOR_YELLOW);
  67. $yellowStyle->getFont()->setColor(new Color(Color::COLOR_BLUE));
  68. $greenStyle = new Style(false, true);
  69. $greenStyle->getFill()
  70. ->setFillType(Fill::FILL_SOLID)
  71. ->getEndColor()->setARGB(Color::COLOR_GREEN);
  72. $greenStyle->getFont()->setColor(new Color(Color::COLOR_DARKRED));
  73. $greenStyleMoney = clone $greenStyle;
  74. $greenStyleMoney->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_ACCOUNTING_USD);
  75. // Set conditional formatting rules and styles
  76. $helper->log('Define conditional formatting and set styles');
  77. // Set rules for Odd/Even Expression Comparison
  78. $cellRange = 'A2:C11';
  79. $conditionalStyles = [];
  80. $wizardFactory = new Wizard($cellRange);
  81. /** @var Wizard\Expression $expressionWizard */
  82. $expressionWizard = $wizardFactory->newRule(Wizard::EXPRESSION);
  83. $expressionWizard->expression('ISODD(A1)')
  84. ->setStyle($greenStyle);
  85. $conditionalStyles[] = $expressionWizard->getConditional();
  86. $expressionWizard->expression('ISEVEN(A1)')
  87. ->setStyle($yellowStyle);
  88. $conditionalStyles[] = $expressionWizard->getConditional();
  89. $spreadsheet->getActiveSheet()
  90. ->getStyle($expressionWizard->getCellRange())
  91. ->setConditionalStyles($conditionalStyles);
  92. // Set rules for Sales Grid Row match against Country Comparison
  93. $cellRange = 'A17:D22';
  94. $conditionalStyles = [];
  95. $wizardFactory = new Wizard($cellRange);
  96. /** @var Wizard\Expression $expressionWizard */
  97. $expressionWizard = $wizardFactory->newRule(Wizard::EXPRESSION);
  98. $expressionWizard->expression('$C1="USA"')
  99. ->setStyle($greenStyleMoney);
  100. $conditionalStyles[] = $expressionWizard->getConditional();
  101. $spreadsheet->getActiveSheet()
  102. ->getStyle($expressionWizard->getCellRange())
  103. ->setConditionalStyles($conditionalStyles);
  104. // Set rules for Sales Grid Row match against Country and Quarter Comparison
  105. $cellRange = 'A27:D32';
  106. $conditionalStyles = [];
  107. $wizardFactory = new Wizard($cellRange);
  108. /** @var Wizard\Expression $expressionWizard */
  109. $expressionWizard = $wizardFactory->newRule(Wizard::EXPRESSION);
  110. $expressionWizard->expression('AND($C1="USA",$D1="Q4")')
  111. ->setStyle($greenStyleMoney);
  112. $conditionalStyles[] = $expressionWizard->getConditional();
  113. $spreadsheet->getActiveSheet()
  114. ->getStyle($expressionWizard->getCellRange())
  115. ->setConditionalStyles($conditionalStyles);
  116. // Set conditional formatting rules and styles
  117. $helper->log('Set some additional styling for money formats');
  118. $spreadsheet->getActiveSheet()->getStyle('B17:B22')
  119. ->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_ACCOUNTING_USD);
  120. $spreadsheet->getActiveSheet()->getStyle('B27:B32')
  121. ->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_ACCOUNTING_USD);
  122. $spreadsheet->getActiveSheet()->getColumnDimension('B')
  123. ->setAutoSize(true);
  124. // Save
  125. $helper->write($spreadsheet, __FILE__);