fb379385e0
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
127 lines
4.1 KiB
PHP
127 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Functional;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
|
|
class FreezePaneTest extends AbstractFunctional
|
|
{
|
|
public function providerFormats()
|
|
{
|
|
return [
|
|
['Xls'],
|
|
['Xlsx'],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerFormats
|
|
*
|
|
* @param string $format
|
|
*/
|
|
public function testFreezePane($format)
|
|
{
|
|
$cellSplit = 'B4';
|
|
$topLeftCell = 'E7';
|
|
|
|
$spreadsheet = new Spreadsheet();
|
|
$spreadsheet->getActiveSheet()->freezePane($cellSplit, $topLeftCell);
|
|
|
|
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format);
|
|
|
|
// Read written file
|
|
$reloadedActive = $reloadedSpreadsheet->getActiveSheet();
|
|
$actualCellSplit = $reloadedActive->getFreezePane();
|
|
$actualTopLeftCell = $reloadedActive->getTopLeftCell();
|
|
|
|
self::assertSame($cellSplit, $actualCellSplit, 'should be able to set freeze pane');
|
|
self::assertSame($topLeftCell, $actualTopLeftCell, 'should be able to set the top left cell');
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerFormats
|
|
*
|
|
* @param string $format
|
|
*/
|
|
public function testFreezePaneWithInvalidSelectedCells($format)
|
|
{
|
|
$cellSplit = 'A7';
|
|
$topLeftCell = 'A24';
|
|
|
|
$spreadsheet = new Spreadsheet();
|
|
$worksheet = $spreadsheet->getActiveSheet();
|
|
|
|
$worksheet->freezePane('A7', 'A24');
|
|
$worksheet->setSelectedCells('F5');
|
|
|
|
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format);
|
|
|
|
// Read written file
|
|
$reloadedActive = $reloadedSpreadsheet->getActiveSheet();
|
|
$actualCellSplit = $reloadedActive->getFreezePane();
|
|
$actualTopLeftCell = $reloadedActive->getTopLeftCell();
|
|
|
|
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('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());
|
|
}
|
|
}
|