1 | <?php |
||
2 | |||
3 | declare(strict_types=1); |
||
4 | |||
5 | namespace PhpOffice\PhpSpreadsheetTests; |
||
6 | |||
7 | use PhpOffice\PhpSpreadsheet\Calculation\Calculation; |
||
0 ignored issues
–
show
|
|||
8 | use PhpOffice\PhpSpreadsheet\NamedRange; |
||
9 | use PhpOffice\PhpSpreadsheet\Spreadsheet; |
||
10 | use PHPUnit\Framework\TestCase; |
||
11 | |||
12 | class ReferenceHelper3Test extends TestCase |
||
13 | { |
||
14 | public function testIssue3661(): void |
||
15 | { |
||
16 | $spreadsheet = new Spreadsheet(); |
||
17 | $sheet = $spreadsheet->getActiveSheet(); |
||
18 | $sheet->setTitle('Data'); |
||
19 | |||
20 | $spreadsheet->addNamedRange(new NamedRange('FIRST', $sheet, '=$A1')); |
||
21 | $spreadsheet->addNamedRange(new NamedRange('SECOND', $sheet, '=$B1')); |
||
22 | $spreadsheet->addNamedRange(new NamedRange('THIRD', $sheet, '=$C1')); |
||
23 | |||
24 | $sheet->fromArray([ |
||
25 | [1, 2, 3, '=FIRST', '=SECOND', '=THIRD', '=10*$A1'], |
||
26 | [4, 5, 6, '=FIRST', '=SECOND', '=THIRD'], |
||
27 | [7, 8, 9, '=FIRST', '=SECOND', '=THIRD'], |
||
28 | ]); |
||
29 | |||
30 | $sheet->insertNewRowBefore(1, 4); |
||
31 | $sheet->insertNewColumnBefore('A', 1); |
||
32 | self::assertSame(1, $sheet->getCell('E5')->getCalculatedValue()); |
||
33 | self::assertSame(5, $sheet->getCell('F6')->getCalculatedValue()); |
||
34 | self::assertSame(9, $sheet->getCell('G7')->getCalculatedValue()); |
||
35 | self::assertSame('=10*$B5', $sheet->getCell('H5')->getValue()); |
||
36 | self::assertSame(10, $sheet->getCell('H5')->getCalculatedValue()); |
||
37 | $firstColumn = $spreadsheet->getNamedRange('FIRST'); |
||
38 | /** @var NamedRange $firstColumn */ |
||
39 | self::assertSame('=$B1', $firstColumn->getRange()); |
||
40 | $spreadsheet->disconnectWorksheets(); |
||
41 | } |
||
42 | |||
43 | public function testCompletelyRelative(): void |
||
44 | { |
||
45 | $spreadsheet = new Spreadsheet(); |
||
46 | $sheet = $spreadsheet->getActiveSheet(); |
||
47 | $sheet->setTitle('Data'); |
||
48 | |||
49 | $spreadsheet->addNamedRange(new NamedRange('CellAbove', $sheet, '=A1048576')); |
||
50 | $spreadsheet->addNamedRange(new NamedRange('CellBelow', $sheet, '=A2')); |
||
51 | $spreadsheet->addNamedRange(new NamedRange('CellToLeft', $sheet, '=XFD1')); |
||
52 | $spreadsheet->addNamedRange(new NamedRange('CellToRight', $sheet, '=B1')); |
||
53 | |||
54 | $sheet->fromArray([ |
||
55 | [null, 'Above', null, null, 'Above', null, null, 'Above', null, null, 'Above', null], |
||
56 | ['Left', '=CellAbove', 'Right', 'Left', '=CellBelow', 'Right', 'Left', '=CellToLeft', 'Right', 'Left', '=CellToRight', 'Right'], |
||
57 | [null, 'Below', null, null, 'Below', null, null, 'Below', null, null, 'Below', null], |
||
58 | ], null, 'A1', true); |
||
59 | self::assertSame('Above', $sheet->getCell('B2')->getCalculatedValue()); |
||
60 | self::assertSame('Below', $sheet->getCell('E2')->getCalculatedValue()); |
||
61 | self::assertSame('Left', $sheet->getCell('H2')->getCalculatedValue()); |
||
62 | self::assertSame('Right', $sheet->getCell('K2')->getCalculatedValue()); |
||
63 | |||
64 | Calculation::getInstance($spreadsheet)->flushInstance(); |
||
65 | self::assertNull($sheet->getCell('L7')->getCalculatedValue(), 'value in L7 after flush is null'); |
||
66 | // Reset it once more |
||
67 | Calculation::getInstance($spreadsheet)->flushInstance(); |
||
68 | // shift 5 rows down and 1 column to the right |
||
69 | $sheet->insertNewRowBefore(1, 5); |
||
70 | $sheet->insertNewColumnBefore('A', 1); |
||
71 | |||
72 | self::assertSame('Above', $sheet->getCell('C7')->getCalculatedValue()); // Above |
||
73 | self::assertSame('Below', $sheet->getCell('F7')->getCalculatedValue()); |
||
74 | self::assertSame('Left', $sheet->getCell('I7')->getCalculatedValue()); |
||
75 | self::assertSame('Right', $sheet->getCell('L7')->getCalculatedValue()); |
||
76 | |||
77 | $sheet2 = $spreadsheet->createSheet(); |
||
78 | $sheet2->setCellValue('L6', 'NotThisCell'); |
||
79 | $sheet2->setCellValue('L7', '=CellAbove'); |
||
80 | self::assertSame('Above', $sheet2->getCell('L7')->getCalculatedValue(), 'relative value uses cell on worksheet where name is defined'); |
||
81 | $spreadsheet->disconnectWorksheets(); |
||
82 | } |
||
83 | |||
84 | private static bool $sumFormulaWorking = false; |
||
85 | |||
86 | public function testSumAboveCell(): void |
||
87 | { |
||
88 | $spreadsheet = new Spreadsheet(); |
||
89 | $sheet = $spreadsheet->getActiveSheet(); |
||
90 | $spreadsheet->addNamedRange(new NamedRange('AboveCell', $sheet, 'A1048576')); |
||
91 | $sheet->setCellValue('C2', 123); |
||
92 | $sheet->setCellValue('C3', '=AboveCell'); |
||
93 | $sheet->fromArray([ |
||
94 | ['Column 1', 'Column 2'], |
||
95 | [2, 1], |
||
96 | [4, 3], |
||
97 | [6, 5], |
||
98 | [8, 7], |
||
99 | [10, 9], |
||
100 | [12, 11], |
||
101 | [14, 13], |
||
102 | [16, 15], |
||
103 | ['=SUM(A2:AboveCell)', '=SUM(B2:AboveCell)'], |
||
104 | ], null, 'A1', true); |
||
105 | self::assertSame(123, $sheet->getCell('C3')->getCalculatedValue()); |
||
106 | if (self::$sumFormulaWorking) { |
||
107 | self::assertSame(72, $sheet->getCell('A10')->getCalculatedValue()); |
||
108 | } else { |
||
109 | $spreadsheet->disconnectWorksheets(); |
||
110 | self::markTestIncomplete('PhpSpreadsheet does not handle this correctly'); |
||
111 | } |
||
112 | $spreadsheet->disconnectWorksheets(); |
||
113 | } |
||
114 | } |
||
115 |
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"]
, you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths