mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-17 05:26:45 +00:00
Not Finding Rels File (#3555)
Fix #3552. Inserting rows or columns can cause page break arrays to be out of order. Sort them in Worksheet functions getBreaks, getRowBreaks, and getColumnBreaks before returning to caller.
This commit is contained in:
@@ -1806,9 +1806,15 @@ class Worksheet implements IComparable
|
||||
public function getBreaks()
|
||||
{
|
||||
$breaks = [];
|
||||
/** @var callable */
|
||||
$compareFunction = [self::class, 'compareRowBreaks'];
|
||||
uksort($this->rowBreaks, $compareFunction);
|
||||
foreach ($this->rowBreaks as $break) {
|
||||
$breaks[$break->getCoordinate()] = self::BREAK_ROW;
|
||||
}
|
||||
/** @var callable */
|
||||
$compareFunction = [self::class, 'compareColumnBreaks'];
|
||||
uksort($this->columnBreaks, $compareFunction);
|
||||
foreach ($this->columnBreaks as $break) {
|
||||
$breaks[$break->getCoordinate()] = self::BREAK_COLUMN;
|
||||
}
|
||||
@@ -1823,16 +1829,40 @@ class Worksheet implements IComparable
|
||||
*/
|
||||
public function getRowBreaks()
|
||||
{
|
||||
/** @var callable */
|
||||
$compareFunction = [self::class, 'compareRowBreaks'];
|
||||
uksort($this->rowBreaks, $compareFunction);
|
||||
|
||||
return $this->rowBreaks;
|
||||
}
|
||||
|
||||
protected static function compareRowBreaks(string $coordinate1, string $coordinate2): int
|
||||
{
|
||||
$row1 = Coordinate::indexesFromString($coordinate1)[1];
|
||||
$row2 = Coordinate::indexesFromString($coordinate2)[1];
|
||||
|
||||
return $row1 - $row2;
|
||||
}
|
||||
|
||||
protected static function compareColumnBreaks(string $coordinate1, string $coordinate2): int
|
||||
{
|
||||
$column1 = Coordinate::indexesFromString($coordinate1)[0];
|
||||
$column2 = Coordinate::indexesFromString($coordinate2)[0];
|
||||
|
||||
return $column1 - $column2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get row breaks.
|
||||
* Get column breaks.
|
||||
*
|
||||
* @return PageBreak[]
|
||||
*/
|
||||
public function getColumnBreaks()
|
||||
{
|
||||
/** @var callable */
|
||||
$compareFunction = [self::class, 'compareColumnBreaks'];
|
||||
uksort($this->columnBreaks, $compareFunction);
|
||||
|
||||
return $this->columnBreaks;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
|
||||
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
|
||||
|
||||
class Issue3552Test extends AbstractFunctional
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private static $testbook = 'tests/data/Reader/XLSX/issue.3552.xlsx';
|
||||
|
||||
public function testRowBreaks(): void
|
||||
{
|
||||
$reader = new Xlsx();
|
||||
$spreadsheet = $reader->load(self::$testbook);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
self::assertSame(['A92', 'A184', 'A276', 'A368', 'A417', 'A511', 'A554'], array_keys($sheet->getRowBreaks()));
|
||||
$sheet->insertNewRowBefore(397, 1);
|
||||
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
$reloadedSheet = $reloadedSpreadsheet->getActiveSheet();
|
||||
self::assertSame(['A92', 'A184', 'A276', 'A368', 'A418', 'A512', 'A555'], array_keys($reloadedSheet->getRowBreaks()));
|
||||
$reloadedSpreadsheet->disconnectWorksheets();
|
||||
}
|
||||
|
||||
public function testColumnBreaks(): void
|
||||
{
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
$sheet->setBreak('Z1', Worksheet::BREAK_COLUMN);
|
||||
$sheet->setBreak('H1', Worksheet::BREAK_COLUMN);
|
||||
$sheet->setBreak('P1', Worksheet::BREAK_COLUMN);
|
||||
self::assertSame(['H1', 'P1', 'Z1'], array_keys($sheet->getColumnBreaks()));
|
||||
$sheet->insertNewColumnBefore('N', 2);
|
||||
self::assertSame(['H1', 'R1', 'AB1'], array_keys($sheet->getColumnBreaks()));
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Reference in New Issue
Block a user