mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-10 10:06:30 +00:00
6443416828
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.
37 lines
1.5 KiB
PHP
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();
|
|
}
|
|
}
|