AbsoluteNamedRange.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. use PhpOffice\PhpSpreadsheet\NamedRange;
  3. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  4. require __DIR__ . '/../Header.php';
  5. $spreadsheet = new Spreadsheet();
  6. $worksheet = $spreadsheet->setActiveSheetIndex(0);
  7. // Set up some basic data for a timesheet
  8. $worksheet
  9. ->setCellValue('A1', 'Charge Rate/hour:')
  10. ->setCellValue('B1', '7.50')
  11. ->setCellValue('A3', 'Date')
  12. ->setCellValue('B3', 'Hours')
  13. ->setCellValue('C3', 'Charge');
  14. // Define named range using an absolute cell reference
  15. $spreadsheet->addNamedRange(new NamedRange('CHARGE_RATE', $worksheet, '=$B$1'));
  16. $workHours = [
  17. '2020-0-06' => 7.5,
  18. '2020-0-07' => 7.25,
  19. '2020-0-08' => 6.5,
  20. '2020-0-09' => 7.0,
  21. '2020-0-10' => 5.5,
  22. ];
  23. // Populate the Timesheet
  24. $startRow = 4;
  25. $row = $startRow;
  26. foreach ($workHours as $date => $hours) {
  27. $worksheet
  28. ->setCellValue("A{$row}", $date)
  29. ->setCellValue("B{$row}", $hours)
  30. ->setCellValue("C{$row}", "=B{$row}*CHARGE_RATE");
  31. ++$row;
  32. }
  33. $endRow = $row - 1;
  34. ++$row;
  35. $worksheet
  36. ->setCellValue("B{$row}", "=SUM(B{$startRow}:B{$endRow})")
  37. ->setCellValue("C{$row}", "=SUM(C{$startRow}:C{$endRow})");
  38. $helper->log(sprintf(
  39. 'Worked %.2f hours at a rate of %.2f - Charge to the client is %.2f',
  40. $worksheet->getCell("B{$row}")->getCalculatedValue(),
  41. $worksheet->getCell('B1')->getValue(),
  42. $worksheet->getCell("C{$row}")->getCalculatedValue()
  43. ));
  44. $helper->write($spreadsheet, __FILE__, ['Xlsx']);