05_Date_Comparisons.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  3. use PhpOffice\PhpSpreadsheet\Style\Alignment;
  4. use PhpOffice\PhpSpreadsheet\Style\Color;
  5. use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\Wizard;
  6. use PhpOffice\PhpSpreadsheet\Style\Fill;
  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('B1', 'yesterday()')
  26. ->setCellValue('C1', 'today()')
  27. ->setCellValue('D1', 'tomorrow()')
  28. ->setCellValue('E1', 'last7Days()')
  29. ->setCellValue('F1', 'lastWeek()')
  30. ->setCellValue('G1', 'thisWeek()')
  31. ->setCellValue('H1', 'nextWeek()')
  32. ->setCellValue('I1', 'lastMonth()')
  33. ->setCellValue('J1', 'thisMonth()')
  34. ->setCellValue('K1', 'nextMonth()');
  35. $dateFunctionArray = [
  36. 'yesterday()',
  37. 'today()',
  38. 'tomorrow()',
  39. 'last7Days()',
  40. 'lastWeek()',
  41. 'thisWeek()',
  42. 'nextWeek()',
  43. 'lastMonth()',
  44. 'thisMonth()',
  45. 'nextMonth()',
  46. ];
  47. $dateTitleArray = [
  48. ['First day of last month'],
  49. ['Last day of last month'],
  50. ['Last Monday'],
  51. ['Last Friday'],
  52. ['Monday last week'],
  53. ['Wednesday last week'],
  54. ['Friday last week'],
  55. ['Yesterday'],
  56. ['Today'],
  57. ['Tomorrow'],
  58. ['Monday this week'],
  59. ['Wednesday this week'],
  60. ['Friday this week'],
  61. ['Monday next week'],
  62. ['Wednesday next week'],
  63. ['Friday next week'],
  64. ['First day of next month'],
  65. ['Last day of next month'],
  66. ];
  67. $dataArray = [
  68. ['=EOMONTH(TODAY(),-2)+1'],
  69. ['=EOMONTH(TODAY(),-1)'],
  70. ['=TODAY()-WEEKDAY(TODAY(),3)'],
  71. ['=TODAY()-WEEKDAY(TODAY())-1'],
  72. ['=2-WEEKDAY(TODAY())+TODAY()-7'],
  73. ['=4-WEEKDAY(TODAY())+TODAY()-7'],
  74. ['=6-WEEKDAY(TODAY())+TODAY()-7'],
  75. ['=TODAY()-1'],
  76. ['=TODAY()'],
  77. ['=TODAY()+1'],
  78. ['=2-WEEKDAY(TODAY())+TODAY()'],
  79. ['=4-WEEKDAY(TODAY())+TODAY()'],
  80. ['=6-WEEKDAY(TODAY())+TODAY()'],
  81. ['=2-WEEKDAY(TODAY())+TODAY()+7'],
  82. ['=4-WEEKDAY(TODAY())+TODAY()+7'],
  83. ['=6-WEEKDAY(TODAY())+TODAY()+7'],
  84. ['=EOMONTH(TODAY(),0)+1'],
  85. ['=EOMONTH(TODAY(),1)'],
  86. ];
  87. $spreadsheet->getActiveSheet()
  88. ->fromArray($dateFunctionArray, null, 'B1', true);
  89. $spreadsheet->getActiveSheet()
  90. ->fromArray($dateTitleArray, null, 'A2', true);
  91. for ($column = 'B'; $column !== 'L'; ++$column) {
  92. $spreadsheet->getActiveSheet()
  93. ->fromArray($dataArray, null, "{$column}2", true);
  94. }
  95. // Set title row bold
  96. $helper->log('Set title row bold');
  97. $spreadsheet->getActiveSheet()->getStyle('B1:K1')->getFont()->setBold(true);
  98. $spreadsheet->getActiveSheet()->getStyle('B1:K1')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT);
  99. // Define some styles for our Conditionals
  100. $helper->log('Define some styles for our Conditionals');
  101. $yellowStyle = new Style(false, true);
  102. $yellowStyle->getFill()
  103. ->setFillType(Fill::FILL_SOLID)
  104. ->getEndColor()->setARGB(Color::COLOR_YELLOW);
  105. $yellowStyle->getFont()->setColor(new Color(Color::COLOR_BLUE));
  106. // Set conditional formatting rules and styles
  107. $helper->log('Define conditional formatting and set styles');
  108. for ($column = 'B'; $column !== 'L'; ++$column) {
  109. $wizardFactory = new Wizard("{$column}2:{$column}19");
  110. /** @var Wizard\DateValue $dateWizard */
  111. $dateWizard = $wizardFactory->newRule(Wizard::DATES_OCCURRING);
  112. $conditionalStyles = [];
  113. $methodName = trim($spreadsheet->getActiveSheet()->getCell("{$column}1")->getValue(), '()');
  114. $dateWizard->$methodName()
  115. ->setStyle($yellowStyle);
  116. $conditionalStyles[] = $dateWizard->getConditional();
  117. $spreadsheet->getActiveSheet()
  118. ->getStyle($dateWizard->getCellRange())
  119. ->setConditionalStyles($conditionalStyles);
  120. }
  121. // Set conditional formatting rules and styles
  122. $helper->log('Set some additional styling for date formats');
  123. $spreadsheet->getActiveSheet()->getStyle('B:B')->getNumberFormat()->setFormatCode('ddd dd-mmm-yyyy');
  124. for ($column = 'A'; $column !== 'L'; ++$column) {
  125. if ($column !== 'A') {
  126. $spreadsheet->getActiveSheet()->getStyle("{$column}:{$column}")
  127. ->getNumberFormat()->setFormatCode('ddd dd-mmm-yyyy');
  128. }
  129. $spreadsheet->getActiveSheet()->getColumnDimension($column)
  130. ->setAutoSize(true);
  131. }
  132. $spreadsheet->getActiveSheet()->getStyle('A:A')->getFont()->setBold(true);
  133. // Save
  134. $helper->write($spreadsheet, __FILE__);