mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-16 13:06:31 +00:00
4e09fd407d
* Permit Max Column for Row Breaks Fix #3143. Page break was dropped. Difference between good and bad was the use of attribute `max` in `brk` tag in the good spreadsheet. However, `max` was *not* required in a similar spreadsheet. So the reason for the problem isn't completely explained. Nevertheless, it can't really hurt to capture the `max` value on read (if present) and generate it on write. This resolves the issue. User is also permitted to specify max column when setting a row break programatically. I am not yet in position to document when that might be a good idea. * Case-sensitive Directory Name Not a problem on my Windows system. * Update Documentation and Add Tests Change is necessitated by probable Excel bug. * Unhappy With Initial Implementation I kind of shoe-horned it in. Better to create a new PageBreak class, which will make it easier to accomodate any future surprises about page break handling. The only difficulty with the new approach is making sure getBreaks maintains backwards compatibility. New tests will ensure that.
70 lines
2.9 KiB
PHP
70 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
|
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class RowBreakTest extends TestCase
|
|
{
|
|
public function testReadAndWriteRowBreak(): void
|
|
{
|
|
$file = 'tests/data/Reader/XLSX/issue.3143a.xlsx';
|
|
$reader = new XlsxReader();
|
|
$spreadsheet = $reader->load($file);
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$writer = new XlsxWriter($spreadsheet);
|
|
$writerWorksheet = new XlsxWriter\Worksheet($writer);
|
|
$data = $writerWorksheet->writeWorksheet($sheet, []);
|
|
$expected = '<rowBreaks count="1" manualBreakCount="1"><brk id="25" man="1" max="16383"/></rowBreaks>';
|
|
self::assertStringContainsString($expected, $data);
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function testWriteRowBreakInPrintAreaWithMax(): void
|
|
{
|
|
// This test specifies max for setBreak and appears correct.
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
for ($row = 1; $row < 60; ++$row) {
|
|
for ($column = 'A'; $column !== 'L'; ++$column) {
|
|
$cell = $column . $row;
|
|
$sheet->getCell($cell)->setValue($cell);
|
|
}
|
|
}
|
|
$sheet->getPageSetup()->setPrintArea('B2:J55');
|
|
$sheet->setBreak('A25', Worksheet::BREAK_ROW, Worksheet::BREAK_ROW_MAX_COLUMN);
|
|
$writer = new XlsxWriter($spreadsheet);
|
|
$writerWorksheet = new XlsxWriter\Worksheet($writer);
|
|
$data = $writerWorksheet->writeWorksheet($sheet, []);
|
|
$expected = '<rowBreaks count="1" manualBreakCount="1"><brk id="25" man="1" max="16383"/></rowBreaks>';
|
|
self::assertStringContainsString($expected, $data);
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function testWriteRowBreakInPrintAreaWithoutMax(): void
|
|
{
|
|
// This test does not specify max for setBreak,
|
|
// and appears incorrect. Probable Excel bug.
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
for ($row = 1; $row < 60; ++$row) {
|
|
for ($column = 'A'; $column !== 'L'; ++$column) {
|
|
$cell = $column . $row;
|
|
$sheet->getCell($cell)->setValue($cell);
|
|
}
|
|
}
|
|
$sheet->getPageSetup()->setPrintArea('B2:J55');
|
|
$sheet->setBreak('A25', Worksheet::BREAK_ROW);
|
|
$writer = new XlsxWriter($spreadsheet);
|
|
$writerWorksheet = new XlsxWriter\Worksheet($writer);
|
|
$data = $writerWorksheet->writeWorksheet($sheet, []);
|
|
$expected = '<rowBreaks count="1" manualBreakCount="1"><brk id="25" man="1"/></rowBreaks>';
|
|
self::assertStringContainsString($expected, $data);
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
}
|