From 812c14a6adc8761853a303bb067e294d148124ca Mon Sep 17 00:00:00 2001 From: mjan4175 Date: Mon, 11 Apr 2022 08:50:28 +0200 Subject: [PATCH 1/8] Fix invalid styles in empty columns of added external sheet. --- src/PhpSpreadsheet/Spreadsheet.php | 5 +++ tests/PhpSpreadsheetTests/SpreadsheetTest.php | 31 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/PhpSpreadsheet/Spreadsheet.php b/src/PhpSpreadsheet/Spreadsheet.php index 52d7fb55..756efee6 100644 --- a/src/PhpSpreadsheet/Spreadsheet.php +++ b/src/PhpSpreadsheet/Spreadsheet.php @@ -869,6 +869,11 @@ class Spreadsheet $cell->setXfIndex($cell->getXfIndex() + $countCellXfs); } + // update the column dimensions Xfs + foreach ($worksheet->getColumnDimensions() as $columnDimension) { + $columnDimension->setXfIndex($columnDimension->getXfIndex() + $countCellXfs); + } + return $this->addSheet($worksheet, $sheetIndex); } diff --git a/tests/PhpSpreadsheetTests/SpreadsheetTest.php b/tests/PhpSpreadsheetTests/SpreadsheetTest.php index 4a1b7393..a91e0ffa 100644 --- a/tests/PhpSpreadsheetTests/SpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/SpreadsheetTest.php @@ -188,4 +188,35 @@ class SpreadsheetTest extends TestCase $sheet->getCell('A1')->getStyle()->getFont()->setBold(true); $this->object->addExternalSheet($sheet); } + + public function testAddExternalColumnDimensionStyles(): void + { + $spreadsheet1 = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); + $sheet1 = $spreadsheet1->createSheet()->setTitle('sheetWithColumnDimension'); + $sheet1->getCell('A1')->setValue(1); + $sheet1->getCell('A1')->getStyle()->getFont()->setItalic(true); + $sheet1->getColumnDimension('B')->setWidth('10')->setXfIndex($sheet1->getCell('A1')->getXfIndex()); + $index = $sheet1->getColumnDimension('B')->getXfIndex(); + self::assertEquals(1, $index); + self::assertCount(2, $spreadsheet1->getCellXfCollection()); + + $spreadsheet2 = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); + $sheet2 = $spreadsheet2->createSheet()->setTitle('sheetWithTwoStyles'); + $sheet2->getCell('A1')->setValue(1); + $sheet2->getCell('A1')->getStyle()->getFont()->setBold(true); + $sheet2->getCell('B2')->getStyle()->getFont()->setSuperscript(true); + $countXfs = count($spreadsheet2->getCellXfCollection()); + self::assertEquals(3, $countXfs); + + $sheet3 = $spreadsheet2->addExternalSheet($sheet1); + self::assertCount(5, $spreadsheet2->getCellXfCollection()); + self::assertTrue($sheet3->getCell('A1')->getStyle()->getFont()->getItalic()); + self::assertTrue($sheet3->getCell('B1')->getStyle()->getFont()->getItalic()); + self::assertFalse($sheet3->getCell('B1')->getStyle()->getFont()->getBold()); + // Prove Xf index changed although style is same. + self::assertEquals($countXfs + $index, $sheet3->getCell('B1')->getXfIndex()); + self::assertEquals($countXfs + $index, $sheet3->getColumnDimension('B')->getXfIndex()); + } + + } From bb4a22d5e97795c6a5606c1b7aef7047160bb242 Mon Sep 17 00:00:00 2001 From: mjan4175 Date: Mon, 11 Apr 2022 08:56:42 +0200 Subject: [PATCH 2/8] FIX: Coding style in tests --- tests/PhpSpreadsheetTests/SpreadsheetTest.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/PhpSpreadsheetTests/SpreadsheetTest.php b/tests/PhpSpreadsheetTests/SpreadsheetTest.php index a91e0ffa..19febb79 100644 --- a/tests/PhpSpreadsheetTests/SpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/SpreadsheetTest.php @@ -217,6 +217,4 @@ class SpreadsheetTest extends TestCase self::assertEquals($countXfs + $index, $sheet3->getCell('B1')->getXfIndex()); self::assertEquals($countXfs + $index, $sheet3->getColumnDimension('B')->getXfIndex()); } - - } From 31ca617570728aeb5b85fe1fdaf87f11e18ab7e1 Mon Sep 17 00:00:00 2001 From: mjan4175 Date: Mon, 11 Apr 2022 09:06:38 +0200 Subject: [PATCH 3/8] FIX: Data types in tests --- tests/PhpSpreadsheetTests/SpreadsheetTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/PhpSpreadsheetTests/SpreadsheetTest.php b/tests/PhpSpreadsheetTests/SpreadsheetTest.php index 19febb79..7e987313 100644 --- a/tests/PhpSpreadsheetTests/SpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/SpreadsheetTest.php @@ -195,7 +195,7 @@ class SpreadsheetTest extends TestCase $sheet1 = $spreadsheet1->createSheet()->setTitle('sheetWithColumnDimension'); $sheet1->getCell('A1')->setValue(1); $sheet1->getCell('A1')->getStyle()->getFont()->setItalic(true); - $sheet1->getColumnDimension('B')->setWidth('10')->setXfIndex($sheet1->getCell('A1')->getXfIndex()); + $sheet1->getColumnDimension('B')->setWidth(10)->setXfIndex($sheet1->getCell('A1')->getXfIndex()); $index = $sheet1->getColumnDimension('B')->getXfIndex(); self::assertEquals(1, $index); self::assertCount(2, $spreadsheet1->getCellXfCollection()); From 43e0e64cd40aaf4a880e483bca06c79a9b8bb64c Mon Sep 17 00:00:00 2001 From: mjan4175 Date: Mon, 11 Apr 2022 09:31:07 +0200 Subject: [PATCH 4/8] CHANGELOG.md contribution --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7ae1854..3ea07a96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). Nor is this a perfect solution, as there may still be issues when function calls have array arguments that themselves contain function calls; but it's still better than the current logic. - Fix for escaping double quotes within a formula [Issue #1971](https://github.com/PHPOffice/PhpSpreadsheet/issues/1971) [PR #2651](https://github.com/PHPOffice/PhpSpreadsheet/pull/2651) +- Fix invalid style of cells in empty columns with columnDimensions in added external sheet. [PR #2739](https://github.com/PHPOffice/PhpSpreadsheet/pull/2739) ## 1.22.0 - 2022-02-18 @@ -292,7 +293,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). ### Changed -- Use of `nb` rather than `no` as the locale code for Norsk Bokmål. +- Use of `nb` rather than `no` as the locale code for Norsk Bokmal. ### Deprecated @@ -300,7 +301,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). ### Removed -- Use of `nb` rather than `no` as the locale language code for Norsk Bokmål. +- Use of `nb` rather than `no` as the locale language code for Norsk Bokmal. ### Fixed From 5719b213410bcc4725da1002daefb2647253b07b Mon Sep 17 00:00:00 2001 From: mjan4175 Date: Mon, 11 Apr 2022 09:39:53 +0200 Subject: [PATCH 5/8] FIX: Changelog revert unwanted changes --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ea07a96..05cd3604 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). - Fix for escaping double quotes within a formula [Issue #1971](https://github.com/PHPOffice/PhpSpreadsheet/issues/1971) [PR #2651](https://github.com/PHPOffice/PhpSpreadsheet/pull/2651) - Fix invalid style of cells in empty columns with columnDimensions in added external sheet. [PR #2739](https://github.com/PHPOffice/PhpSpreadsheet/pull/2739) + ## 1.22.0 - 2022-02-18 ### Added @@ -293,7 +294,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). ### Changed -- Use of `nb` rather than `no` as the locale code for Norsk Bokmal. +- Use of `nb` rather than `no` as the locale code for Norsk Bokmål. ### Deprecated @@ -301,7 +302,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). ### Removed -- Use of `nb` rather than `no` as the locale language code for Norsk Bokmal. +- Use of `nb` rather than `no` as the locale language code for Norsk Bokmål. ### Fixed From e41fdf490950d9d409c5e66e9ffcfdcd607795c6 Mon Sep 17 00:00:00 2001 From: mjan4175 Date: Tue, 12 Apr 2022 13:38:19 +0200 Subject: [PATCH 6/8] FIX: Invalid styles in rowDimensions of added external sheet. --- src/PhpSpreadsheet/Spreadsheet.php | 8 +++++ tests/PhpSpreadsheetTests/SpreadsheetTest.php | 29 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/PhpSpreadsheet/Spreadsheet.php b/src/PhpSpreadsheet/Spreadsheet.php index 756efee6..3c898928 100644 --- a/src/PhpSpreadsheet/Spreadsheet.php +++ b/src/PhpSpreadsheet/Spreadsheet.php @@ -874,6 +874,14 @@ class Spreadsheet $columnDimension->setXfIndex($columnDimension->getXfIndex() + $countCellXfs); } + // update the row dimensions Xfs + foreach ($worksheet->getRowDimensions() as $rowDimension) { + $xfIndex = $rowDimension->getXfIndex(); + if ($xfIndex !== null) { + $rowDimension->setXfIndex($xfIndex + $countCellXfs); + } + } + return $this->addSheet($worksheet, $sheetIndex); } diff --git a/tests/PhpSpreadsheetTests/SpreadsheetTest.php b/tests/PhpSpreadsheetTests/SpreadsheetTest.php index 7e987313..11fb56e4 100644 --- a/tests/PhpSpreadsheetTests/SpreadsheetTest.php +++ b/tests/PhpSpreadsheetTests/SpreadsheetTest.php @@ -217,4 +217,33 @@ class SpreadsheetTest extends TestCase self::assertEquals($countXfs + $index, $sheet3->getCell('B1')->getXfIndex()); self::assertEquals($countXfs + $index, $sheet3->getColumnDimension('B')->getXfIndex()); } + + public function testAddExternalRowDimensionStyles(): void + { + $spreadsheet1 = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); + $sheet1 = $spreadsheet1->createSheet()->setTitle('sheetWithColumnDimension'); + $sheet1->getCell('A1')->setValue(1); + $sheet1->getCell('A1')->getStyle()->getFont()->setItalic(true); + $sheet1->getRowDimension(2)->setXfIndex($sheet1->getCell('A1')->getXfIndex()); + $index = $sheet1->getRowDimension(2)->getXfIndex(); + self::assertEquals(1, $index); + self::assertCount(2, $spreadsheet1->getCellXfCollection()); + + $spreadsheet2 = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); + $sheet2 = $spreadsheet2->createSheet()->setTitle('sheetWithTwoStyles'); + $sheet2->getCell('A1')->setValue(1); + $sheet2->getCell('A1')->getStyle()->getFont()->setBold(true); + $sheet2->getCell('B2')->getStyle()->getFont()->setSuperscript(true); + $countXfs = count($spreadsheet2->getCellXfCollection()); + self::assertEquals(3, $countXfs); + + $sheet3 = $spreadsheet2->addExternalSheet($sheet1); + self::assertCount(5, $spreadsheet2->getCellXfCollection()); + self::assertTrue($sheet3->getCell('A1')->getStyle()->getFont()->getItalic()); + self::assertTrue($sheet3->getCell('A2')->getStyle()->getFont()->getItalic()); + self::assertFalse($sheet3->getCell('A2')->getStyle()->getFont()->getBold()); + // Prove Xf index changed although style is same. + self::assertEquals($countXfs + $index, $sheet3->getCell('A2')->getXfIndex()); + self::assertEquals($countXfs + $index, $sheet3->getRowDimension(2)->getXfIndex()); + } } From 5f317250b38be4d6dd5a5d408ed7ee6287d1bfd5 Mon Sep 17 00:00:00 2001 From: mjan4175 Date: Tue, 12 Apr 2022 19:43:42 +0200 Subject: [PATCH 7/8] CHANGELOG.md contribution --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05cd3604..1d562455 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,7 +57,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). Nor is this a perfect solution, as there may still be issues when function calls have array arguments that themselves contain function calls; but it's still better than the current logic. - Fix for escaping double quotes within a formula [Issue #1971](https://github.com/PHPOffice/PhpSpreadsheet/issues/1971) [PR #2651](https://github.com/PHPOffice/PhpSpreadsheet/pull/2651) -- Fix invalid style of cells in empty columns with columnDimensions in added external sheet. [PR #2739](https://github.com/PHPOffice/PhpSpreadsheet/pull/2739) +- Fix invalid style of cells in empty columns with columnDimensions and rows with rowDimensions in added external sheet. [PR #2739](https://github.com/PHPOffice/PhpSpreadsheet/pull/2739) ## 1.22.0 - 2022-02-18 From c214a199d6566b8a0f07f5e4596067d33950cb53 Mon Sep 17 00:00:00 2001 From: mjan4175 Date: Tue, 12 Apr 2022 19:53:21 +0200 Subject: [PATCH 8/8] FIX: Coding style --- src/PhpSpreadsheet/Spreadsheet.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PhpSpreadsheet/Spreadsheet.php b/src/PhpSpreadsheet/Spreadsheet.php index 3c898928..33b4fe0c 100644 --- a/src/PhpSpreadsheet/Spreadsheet.php +++ b/src/PhpSpreadsheet/Spreadsheet.php @@ -881,7 +881,7 @@ class Spreadsheet $rowDimension->setXfIndex($xfIndex + $countCellXfs); } } - + return $this->addSheet($worksheet, $sheetIndex); }