OffsetTest.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Calculation\Functions\LookupRef;
  3. use PhpOffice\PhpSpreadsheet\Calculation\LookupRef;
  4. use PhpOffice\PhpSpreadsheet\NamedRange;
  5. class OffsetTest extends AllSetupTeardown
  6. {
  7. /**
  8. * @dataProvider providerOFFSET
  9. *
  10. * @param mixed $expectedResult
  11. * @param null|string $cellReference
  12. */
  13. public function testOFFSET($expectedResult, $cellReference = null): void
  14. {
  15. $result = LookupRef\Offset::OFFSET($cellReference);
  16. self::assertSame($expectedResult, $result);
  17. }
  18. public function providerOFFSET(): array
  19. {
  20. return require 'tests/data/Calculation/LookupRef/OFFSET.php';
  21. }
  22. public function testOffsetSpreadsheet(): void
  23. {
  24. $sheet = $this->getSheet();
  25. $sheet->getCell('B6')->setValue(4);
  26. $sheet->getCell('B7')->setValue(8);
  27. $sheet->getCell('B8')->setValue(3);
  28. $sheet->getCell('D6')->setValue(10);
  29. $sheet->getCell('D7')->setValue(3);
  30. $sheet->getCell('D8')->setValue(6);
  31. $sheet->getCell('A1')->setValue('=OFFSET(D3,3,-2,1,1)');
  32. self::assertSame(4, $sheet->getCell('A1')->getCalculatedValue());
  33. $sheet->getCell('A2')->setValue('=SUM(OFFSET(D3:F5,3,-2, 3, 3))');
  34. self::assertSame(34, $sheet->getCell('A2')->getCalculatedValue());
  35. $sheet->getCell('A3')->setValue('=OFFSET(D3, -3, -3)');
  36. self::assertSame('#REF!', $sheet->getCell('A3')->getCalculatedValue());
  37. $sheet->getCell('C1')->setValue(5);
  38. $sheet->getCell('A4')->setValue('=OFFSET(C1, 0, 0, 0, 0)');
  39. self::assertSame('#REF!', $sheet->getCell('A4')->getCalculatedValue());
  40. $sheet->getCell('A5')->setValue('=OFFSET(C1, 0, 0)');
  41. self::assertSame(5, $sheet->getCell('A5')->getCalculatedValue());
  42. }
  43. public function testOffsetNamedRange(): void
  44. {
  45. $workSheet = $this->getSheet();
  46. $workSheet->setCellValue('A1', 1);
  47. $workSheet->setCellValue('A2', 2);
  48. $this->getSpreadsheet()->addNamedRange(new NamedRange('demo', $workSheet, '=$A$1'));
  49. $workSheet->setCellValue('B1', '=demo');
  50. $workSheet->setCellValue('B2', '=OFFSET(demo, 1, 0)');
  51. self::assertSame(2, $workSheet->getCell('B2')->getCalculatedValue());
  52. }
  53. }