| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- <?php
- namespace PhpOffice\PhpSpreadsheetTests\Worksheet;
- use PhpOffice\PhpSpreadsheet\Spreadsheet;
- use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
- use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
- class MergeBehaviourTest extends AbstractFunctional
- {
- /**
- * @var array
- */
- private $testDataRaw = [
- [1.1, 2.2, '=ROUND(A1+B1, 1)'],
- [4.4, 5.5, '=ROUND(A2+B2, 1)'],
- ['=ROUND(A1+A2, 1)', '=ROUND(B1+B2, 1)', '=ROUND(A3+B3, 1)'],
- ];
- /**
- * @var array
- */
- private $testDataFormatted = [
- ['=DATE(1960, 12, 19)', '=DATE(2022, 09, 15)'],
- ];
- public function testMergeCellsDefaultBehaviour(): void
- {
- $expectedResult = [
- [1.1, null, null],
- [null, null, null],
- [null, null, null],
- ];
- $mergeRange = 'A1:C3';
- $spreadsheet = new Spreadsheet();
- $worksheet = $spreadsheet->getActiveSheet();
- $worksheet->fromArray($this->testDataRaw, null, 'A1', true);
- $worksheet->mergeCells($mergeRange);
- $mergeResult = $worksheet->toArray(null, true, true, false);
- self::assertSame($expectedResult, $mergeResult);
- }
- public function testMergeCellsDefaultBehaviourFormatted(): void
- {
- $expectedResult = [
- ['1960-12-19', null],
- ];
- $mergeRange = 'A1:B1';
- $spreadsheet = new Spreadsheet();
- $worksheet = $spreadsheet->getActiveSheet();
- $worksheet->fromArray($this->testDataFormatted, null, 'A1', true);
- $worksheet->getStyle($mergeRange)->getNumberFormat()->setFormatCode('yyyy-mm-dd');
- $worksheet->mergeCells($mergeRange);
- $mergeResult = $worksheet->toArray(null, true, true, false);
- self::assertSame($expectedResult, $mergeResult);
- }
- public function testMergeCellsHideBehaviour(): void
- {
- $expectedResult = [
- [1.1, 2.2, 3.3],
- [4.4, 5.5, 9.9],
- [5.5, 7.7, 13.2],
- ];
- $mergeRange = 'A1:C3';
- $spreadsheet = new Spreadsheet();
- $worksheet = $spreadsheet->getActiveSheet();
- $worksheet->fromArray($this->testDataRaw, null, 'A1', true);
- $worksheet->mergeCells($mergeRange, Worksheet::MERGE_CELL_CONTENT_HIDE);
- $mergeResult = $worksheet->toArray(null, true, true, false);
- self::assertSame($expectedResult, $mergeResult);
- }
- public function testMergeCellsHideBehaviourFormatted(): void
- {
- $expectedResult = [
- ['1960-12-19', '2022-09-15'],
- ];
- $mergeRange = 'A1:B1';
- $spreadsheet = new Spreadsheet();
- $worksheet = $spreadsheet->getActiveSheet();
- $worksheet->fromArray($this->testDataFormatted, null, 'A1', true);
- $worksheet->getStyle($mergeRange)->getNumberFormat()->setFormatCode('yyyy-mm-dd');
- $worksheet->mergeCells($mergeRange, Worksheet::MERGE_CELL_CONTENT_HIDE);
- $mergeResult = $worksheet->toArray(null, true, true, false);
- self::assertSame($expectedResult, $mergeResult);
- }
- /**
- * @dataProvider mergeCellsMergeBehaviourProvider
- */
- public function testMergeCellsMergeBehaviour(array $testData, string $mergeRange, array $expectedResult): void
- {
- $spreadsheet = new Spreadsheet();
- $worksheet = $spreadsheet->getActiveSheet();
- $worksheet->fromArray($testData, null, 'A1', true);
- // Force a precalculation to populate the calculation cache, so that we can verify that it is being cleared
- $worksheet->toArray();
- $worksheet->mergeCells($mergeRange, Worksheet::MERGE_CELL_CONTENT_MERGE);
- $mergeResult = $worksheet->toArray(null, true, true, false);
- self::assertSame($expectedResult, $mergeResult);
- }
- public function mergeCellsMergeBehaviourProvider(): array
- {
- return [
- 'With Calculated Values' => [
- $this->testDataRaw,
- 'A1:C3',
- [
- ['1.1 2.2 1.1 4.4 5.5 0 1.1 0 0', null, null],
- [null, null, null],
- [null, null, null],
- ],
- ],
- 'With Empty Cells' => [
- [
- [1, '', 2],
- [null, 3, null],
- [4, null, 5],
- ],
- 'A1:C3',
- [
- ['1 2 3 4 5', null, null],
- [null, null, null],
- [null, null, null],
- ],
- ],
- [
- [
- [12, '=5+1', '=A1/A2'],
- ],
- 'A1:C1',
- [
- ['12 6 #DIV/0!', null, null],
- ],
- ],
- ];
- }
- public function testMergeCellsMergeBehaviourFormatted(): void
- {
- $expectedResult = [
- ['1960-12-19 2022-09-15', null],
- ];
- $mergeRange = 'A1:B1';
- $spreadsheet = new Spreadsheet();
- $worksheet = $spreadsheet->getActiveSheet();
- $worksheet->fromArray($this->testDataFormatted, null, 'A1', true);
- $worksheet->getStyle($mergeRange)->getNumberFormat()->setFormatCode('yyyy-mm-dd');
- $worksheet->mergeCells($mergeRange, Worksheet::MERGE_CELL_CONTENT_MERGE);
- $mergeResult = $worksheet->toArray(null, true, true, false);
- self::assertSame($expectedResult, $mergeResult);
- }
- }
|