Skip to content

Commit fdc224a

Browse files
guillaume-ro-frPowerKiKi
authored andcommitted
Fix print area parser for XLSX reader
XLSX workbook references may not contains quotes in print area Fixes #733 Fixes #734
1 parent 79d86ef commit fdc224a

File tree

3 files changed

+8
-2
lines changed

3 files changed

+8
-2
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org).
1212
- Support numeric condition in SUMIF, SUMIFS, AVERAGEIF, COUNTIF, MAXIF and MINIF - [#683](https://github.com/PHPOffice/PhpSpreadsheet/issues/683)
1313
- SUMIFS containing multiple conditions - [#704](https://github.com/PHPOffice/PhpSpreadsheet/issues/704)
1414
- Csv reader avoid notice when the file is empty - [#743](https://github.com/PHPOffice/PhpSpreadsheet/pull/743)
15+
- Fix print area parser for XLSX reader - [#734](https://github.com/PHPOffice/PhpSpreadsheet/pull/734)
1516

1617
## [1.5.0] - 2018-10-21
1718

src/PhpSpreadsheet/Reader/Xlsx.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1830,7 +1830,7 @@ public function load($pFilename)
18301830

18311831
break;
18321832
case '_xlnm.Print_Area':
1833-
$rangeSets = preg_split("/'(.*?)'(?:![A-Z0-9]+:[A-Z0-9]+,?)/", $extractedRange, PREG_SPLIT_NO_EMPTY);
1833+
$rangeSets = preg_split("/('?(?:.*?)'?(?:![A-Z0-9]+:[A-Z0-9]+)),?/", $extractedRange, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
18341834
$newRangeSets = [];
18351835
foreach ($rangeSets as $rangeSet) {
18361836
list($sheetName, $rangeSet) = Worksheet::extractSheetTitle($rangeSet, true);

tests/PhpSpreadsheetTests/Functional/PrintAreaTest.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,18 @@ public function testPageSetup($format)
3232
$sheet->getPageSetup()->setPrintArea("A$i:B$i");
3333
}
3434

35+
$worksheet4 = $spreadsheet->createSheet()->setTitle('Sheet 4');
36+
$worksheet4->getPageSetup()->setPrintArea('A4:B4,D1:E4');
37+
3538
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format, function (BaseReader $reader) {
36-
$reader->setLoadSheetsOnly(['Sheet 1', 'Sheet 3']);
39+
$reader->setLoadSheetsOnly(['Sheet 1', 'Sheet 3', 'Sheet 4']);
3740
});
3841

3942
$actual1 = $reloadedSpreadsheet->getSheetByName('Sheet 1')->getPageSetup()->getPrintArea();
4043
$actual3 = $reloadedSpreadsheet->getSheetByName('Sheet 3')->getPageSetup()->getPrintArea();
44+
$actual4 = $reloadedSpreadsheet->getSheetByName('Sheet 4')->getPageSetup()->getPrintArea();
4145
self::assertSame('A1:B1', $actual1, 'should be able to write and read normal page setup');
4246
self::assertSame('A3:B3', $actual3, 'should be able to write and read page setup even when skipping sheets');
47+
self::assertSame('A4:B4,D1:E4', $actual4, 'should be able to write and read page setup with multiple print areas');
4348
}
4449
}

0 commit comments

Comments
 (0)