mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-08-20 02:20:50 +00:00
641f86dc80
A continuation of PR #3859. Change code that would be flagged if we were to run Phpstan at level 9 (we currently run level 8). I may or may not follow up with source code (454 level-9 problems remain for src), but there is no reason to avoid the effort for samples. No changes are made to src.
154 lines
4.9 KiB
PHP
154 lines
4.9 KiB
PHP
<?php
|
|
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\Style\Alignment;
|
|
use PhpOffice\PhpSpreadsheet\Style\Color;
|
|
use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\Wizard;
|
|
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
|
use PhpOffice\PhpSpreadsheet\Style\Style;
|
|
|
|
require __DIR__ . '/../Header.php';
|
|
|
|
// Create new Spreadsheet object
|
|
$helper->log('Create new Spreadsheet object');
|
|
$spreadsheet = new Spreadsheet();
|
|
|
|
// Set document properties
|
|
$helper->log('Set document properties');
|
|
$spreadsheet->getProperties()->setCreator('Mark Baker')
|
|
->setLastModifiedBy('Mark Baker')
|
|
->setTitle('PhpSpreadsheet Test Document')
|
|
->setSubject('PhpSpreadsheet Test Document')
|
|
->setDescription('Test document for PhpSpreadsheet, generated using PHP classes.')
|
|
->setKeywords('office PhpSpreadsheet php')
|
|
->setCategory('Test result file');
|
|
|
|
// Create the worksheet
|
|
$helper->log('Add data');
|
|
|
|
$spreadsheet->setActiveSheetIndex(0);
|
|
$spreadsheet->getActiveSheet()
|
|
->setCellValue('B1', 'yesterday()')
|
|
->setCellValue('C1', 'today()')
|
|
->setCellValue('D1', 'tomorrow()')
|
|
->setCellValue('E1', 'last7Days()')
|
|
->setCellValue('F1', 'lastWeek()')
|
|
->setCellValue('G1', 'thisWeek()')
|
|
->setCellValue('H1', 'nextWeek()')
|
|
->setCellValue('I1', 'lastMonth()')
|
|
->setCellValue('J1', 'thisMonth()')
|
|
->setCellValue('K1', 'nextMonth()');
|
|
|
|
$dateFunctionArray = [
|
|
'yesterday()',
|
|
'today()',
|
|
'tomorrow()',
|
|
'last7Days()',
|
|
'lastWeek()',
|
|
'thisWeek()',
|
|
'nextWeek()',
|
|
'lastMonth()',
|
|
'thisMonth()',
|
|
'nextMonth()',
|
|
];
|
|
$dateTitleArray = [
|
|
['First day of last month'],
|
|
['Last day of last month'],
|
|
['Last Monday'],
|
|
['Last Friday'],
|
|
['Monday last week'],
|
|
['Wednesday last week'],
|
|
['Friday last week'],
|
|
['Yesterday'],
|
|
['Today'],
|
|
['Tomorrow'],
|
|
['Monday this week'],
|
|
['Wednesday this week'],
|
|
['Friday this week'],
|
|
['Monday next week'],
|
|
['Wednesday next week'],
|
|
['Friday next week'],
|
|
['First day of next month'],
|
|
['Last day of next month'],
|
|
];
|
|
$dataArray = [
|
|
['=EOMONTH(TODAY(),-2)+1'],
|
|
['=EOMONTH(TODAY(),-1)'],
|
|
['=TODAY()-WEEKDAY(TODAY(),3)'],
|
|
['=TODAY()-WEEKDAY(TODAY())-1'],
|
|
['=2-WEEKDAY(TODAY())+TODAY()-7'],
|
|
['=4-WEEKDAY(TODAY())+TODAY()-7'],
|
|
['=6-WEEKDAY(TODAY())+TODAY()-7'],
|
|
['=TODAY()-1'],
|
|
['=TODAY()'],
|
|
['=TODAY()+1'],
|
|
['=2-WEEKDAY(TODAY())+TODAY()'],
|
|
['=4-WEEKDAY(TODAY())+TODAY()'],
|
|
['=6-WEEKDAY(TODAY())+TODAY()'],
|
|
['=2-WEEKDAY(TODAY())+TODAY()+7'],
|
|
['=4-WEEKDAY(TODAY())+TODAY()+7'],
|
|
['=6-WEEKDAY(TODAY())+TODAY()+7'],
|
|
['=EOMONTH(TODAY(),0)+1'],
|
|
['=EOMONTH(TODAY(),1)'],
|
|
];
|
|
|
|
$spreadsheet->getActiveSheet()
|
|
->fromArray($dateFunctionArray, null, 'B1', true);
|
|
$spreadsheet->getActiveSheet()
|
|
->fromArray($dateTitleArray, null, 'A2', true);
|
|
for ($column = 'B'; $column !== 'L'; ++$column) {
|
|
$spreadsheet->getActiveSheet()
|
|
->fromArray($dataArray, null, "{$column}2", true);
|
|
}
|
|
|
|
// Set title row bold
|
|
$helper->log('Set title row bold');
|
|
$spreadsheet->getActiveSheet()->getStyle('B1:K1')->getFont()->setBold(true);
|
|
$spreadsheet->getActiveSheet()->getStyle('B1:K1')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT);
|
|
|
|
// Define some styles for our Conditionals
|
|
$helper->log('Define some styles for our Conditionals');
|
|
$yellowStyle = new Style(false, true);
|
|
$yellowStyle->getFill()
|
|
->setFillType(Fill::FILL_SOLID)
|
|
->getEndColor()->setARGB(Color::COLOR_YELLOW);
|
|
$yellowStyle->getFont()->setColor(new Color(Color::COLOR_BLUE));
|
|
|
|
// Set conditional formatting rules and styles
|
|
$helper->log('Define conditional formatting and set styles');
|
|
for ($column = 'B'; $column !== 'L'; ++$column) {
|
|
$wizardFactory = new Wizard("{$column}2:{$column}19");
|
|
/** @var Wizard\DateValue $dateWizard */
|
|
$dateWizard = $wizardFactory->newRule(Wizard::DATES_OCCURRING);
|
|
$conditionalStyles = [];
|
|
|
|
/** @var string */
|
|
$cellContents = $spreadsheet->getActiveSheet()->getCell("{$column}1")->getValue();
|
|
$methodName = trim($cellContents, '()');
|
|
$dateWizard->$methodName()
|
|
->setStyle($yellowStyle);
|
|
|
|
$conditionalStyles[] = $dateWizard->getConditional();
|
|
|
|
$spreadsheet->getActiveSheet()
|
|
->getStyle($dateWizard->getCellRange())
|
|
->setConditionalStyles($conditionalStyles);
|
|
}
|
|
|
|
// Set conditional formatting rules and styles
|
|
$helper->log('Set some additional styling for date formats');
|
|
|
|
$spreadsheet->getActiveSheet()->getStyle('B:B')->getNumberFormat()->setFormatCode('ddd dd-mmm-yyyy');
|
|
for ($column = 'A'; $column !== 'L'; ++$column) {
|
|
if ($column !== 'A') {
|
|
$spreadsheet->getActiveSheet()->getStyle("{$column}:{$column}")
|
|
->getNumberFormat()->setFormatCode('ddd dd-mmm-yyyy');
|
|
}
|
|
$spreadsheet->getActiveSheet()->getColumnDimension($column)
|
|
->setAutoSize(true);
|
|
}
|
|
$spreadsheet->getActiveSheet()->getStyle('A:A')->getFont()->setBold(true);
|
|
|
|
// Save
|
|
$helper->write($spreadsheet, __FILE__);
|