diff --git a/CHANGELOG.md b/CHANGELOG.md index 541e9279..4286fa9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org). - Fix Xlsx Writer's handling of decimal commas [#1282](https://github.com/PHPOffice/PhpSpreadsheet/pull/1282) - Fix for issue by removing test code mistakenly left in [#1328](https://github.com/PHPOffice/PhpSpreadsheet/pull/1328) - Fix for Xls writer wrong selected cells and active sheet [#1256](https://github.com/PHPOffice/PhpSpreadsheet/pull/1256) +- Fix active cell when freeze pane is used [#1323](https://github.com/PHPOffice/PhpSpreadsheet/pull/1323) ## [1.10.1] - 2019-12-02 diff --git a/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php b/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php index bf811bdc..1d5a995a 100644 --- a/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php +++ b/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php @@ -262,8 +262,6 @@ class Worksheet extends WriterPart --$ySplit; $topLeftCell = $pSheet->getTopLeftCell(); - $activeCell = $topLeftCell; - $sqref = $topLeftCell; // pane $pane = 'topRight'; diff --git a/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php b/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php index fda67231..38709716 100644 --- a/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php +++ b/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php @@ -38,15 +38,8 @@ class FreezePaneTest extends AbstractFunctional self::assertSame($topLeftCell, $actualTopLeftCell, 'should be able to set the top left cell'); } - public function providerFormatsInvalidSelectedCells() - { - return [ - ['Xlsx'], - ]; - } - /** - * @dataProvider providerFormatsInvalidSelectedCells + * @dataProvider providerFormats * * @param string $format */ @@ -70,6 +63,64 @@ class FreezePaneTest extends AbstractFunctional self::assertSame($cellSplit, $actualCellSplit, 'should be able to set freeze pane'); self::assertSame($topLeftCell, $actualTopLeftCell, 'should be able to set the top left cell'); - self::assertSame('A24', $reloadedActive->getSelectedCells(), 'selected cell should default to be first cell after the freeze pane'); + self::assertSame('F5', $reloadedActive->getSelectedCells()); + } + + /** + * @dataProvider providerFormats + * + * @param string $format + */ + public function testFreezePaneUserSelectedCell($format) + { + $spreadsheet = new Spreadsheet(); + $worksheet = $spreadsheet->getActiveSheet(); + $worksheet->setCellValue('A1', 'Header1'); + $worksheet->setCellValue('B1', 'Header2'); + $worksheet->setCellValue('C1', 'Header3'); + $worksheet->setCellValue('A2', 'Data1'); + $worksheet->setCellValue('B2', 'Data2'); + $worksheet->setCellValue('C2', 'Data3'); + $worksheet->setCellValue('A3', 'Data4'); + $worksheet->setCellValue('B3', 'Data5'); + $worksheet->setCellValue('C3', 'Data6'); + $worksheet->freezePane('A2'); + $worksheet->setSelectedCells('C3'); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format); + // Read written file + $reloadedActive = $reloadedSpreadsheet->getActiveSheet(); + + $expected = 'C3'; + self::assertSame($expected, $reloadedActive->getSelectedCells()); + } + + /** + * @dataProvider providerFormats + * + * @param string $format + */ + public function testNoFreezePaneUserSelectedCell($format) + { + $spreadsheet = new Spreadsheet(); + $worksheet = $spreadsheet->getActiveSheet(); + $worksheet->setCellValue('A1', 'Header1'); + $worksheet->setCellValue('B1', 'Header2'); + $worksheet->setCellValue('C1', 'Header3'); + $worksheet->setCellValue('A2', 'Data1'); + $worksheet->setCellValue('B2', 'Data2'); + $worksheet->setCellValue('C2', 'Data3'); + $worksheet->setCellValue('A3', 'Data4'); + $worksheet->setCellValue('B3', 'Data5'); + $worksheet->setCellValue('C3', 'Data6'); + //$worksheet->freezePane('A2'); + $worksheet->setSelectedCells('C3'); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format); + // Read written file + $reloadedActive = $reloadedSpreadsheet->getActiveSheet(); + + $expected = 'C3'; + self::assertSame($expected, $reloadedActive->getSelectedCells()); } }