Files
oleibman 6443416828 Xls Reader Vertical Break and Writer Page Order (#3306)
Fix #3055. Xls Reader can set vertical break specifying row 0, causing an exception. It is doubtful that Excel needs a row for a vertical break; code is changed to use row 1 if the input file specifies row 0 (or lower). Code in question has not been exercised in unit test suite. Similarly, code to set horizontal break (which probably does not have a bug) is not exercised in test suite. Finally, page order in Writer incorrectly uses value in opposite way that Reader does. A new sample is added to illustrate that these are all handled correctly; it is easier to verify this by visually comparing the source spreadsheet and the copy made from it. A unit test is also added for the same spreadsheet to formally assert that the 3 properties in question are both read and written correctly.
2023-01-20 17:33:19 -08:00

37 lines
1.5 KiB
PHP

<?php
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xls;
use PhpOffice\PhpSpreadsheet\Reader\Xls;
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
class PageBreakTest extends AbstractFunctional
{
public function testPageBreak(): void
{
$filename = 'samples/templates/50_xlsverticalbreak.xls';
$reader = new Xls();
$spreadsheet = $reader->load($filename);
$sheet = $spreadsheet->getActiveSheet();
$pageSetup = $sheet->getPageSetup();
self::assertSame(PageSetup::PAGEORDER_DOWN_THEN_OVER, $pageSetup->getPageOrder());
$breaks = $sheet->getBreaks();
self::assertCount(2, $breaks);
self::assertSame(Worksheet::BREAK_ROW, $breaks['A5']);
self::assertSame(Worksheet::BREAK_COLUMN, $breaks['H1']);
$newSpreadsheet = $this->writeAndReload($spreadsheet, 'Xls');
$spreadsheet->disconnectWorksheets();
$newSheet = $newSpreadsheet->getActiveSheet();
$newPageSetup = $newSheet->getPageSetup();
self::assertSame(PageSetup::PAGEORDER_DOWN_THEN_OVER, $newPageSetup->getPageOrder());
$newBreaks = $newSheet->getBreaks();
self::assertCount(2, $newBreaks);
self::assertSame(Worksheet::BREAK_ROW, $newBreaks['A5']);
self::assertSame(Worksheet::BREAK_COLUMN, $newBreaks['H1']);
$newSpreadsheet->disconnectWorksheets();
}
}