Fix active cell when freeze pane is used
When freeze pane is in use on a worksheet, PhpSpreadsheet saves to Xlsx in such a way that the active cell is always set to the top left cell below the freeze pane. I find it difficult to understand why: 1. You have given users the setSelectedCells function, but then choose to ignore it. 2. Excel itself does not act in this manner. 3. PHPExcel did not act in this manner. 4. PhpSpreadsheet when writing to Xls does not act in this manner. This is especially emphasized because the one test in FreezePaneTest which would expose the difference is the only test in that member which is not made for both Xls and Xlsx. 5. It is *really* useful to be able to open a spreadsheet anywhere, even when it has header rows. Closes #1323
This commit is contained in:
parent
06d9dc03e9
commit
fb379385e0
|
@ -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
|
||||
|
||||
|
|
|
@ -262,8 +262,6 @@ class Worksheet extends WriterPart
|
|||
--$ySplit;
|
||||
|
||||
$topLeftCell = $pSheet->getTopLeftCell();
|
||||
$activeCell = $topLeftCell;
|
||||
$sqref = $topLeftCell;
|
||||
|
||||
// pane
|
||||
$pane = 'topRight';
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue