Skip to content

Commit 1adc3a6

Browse files
committed
Read printing area correctly when skipping some sheets
Fixes #371
1 parent f58724a commit 1adc3a6

File tree

4 files changed

+51
-2
lines changed

4 files changed

+51
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1717
- Avoid potentially unsupported PSR-16 cache keys - [#354](https://github.com/PHPOffice/PhpSpreadsheet/issues/354)
1818
- Check for MIME type to know if CSV reader can read a file - [#167](https://github.com/PHPOffice/PhpSpreadsheet/issues/167)
1919
- Use proper € symbol for currency format - [#379](https://github.com/PHPOffice/PhpSpreadsheet/pull/379)
20+
- Read printing area correctly when skipping some sheets - [#371](https://github.com/PHPOffice/PhpSpreadsheet/issues/371)
2021

2122
## [1.1.0] - 2018-01-28
2223

src/PhpSpreadsheet/Reader/Xlsx.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1700,7 +1700,7 @@ public function load($pFilename)
17001700
}
17011701

17021702
// Some definedNames are only applicable if we are on the same sheet...
1703-
if ((string) $definedName['localSheetId'] != '' && (string) $definedName['localSheetId'] == $sheetId) {
1703+
if ((string) $definedName['localSheetId'] != '' && (string) $definedName['localSheetId'] == $oldSheetId) {
17041704
// Switch on type
17051705
switch ((string) $definedName['name']) {
17061706
case '_xlnm._FilterDatabase':

tests/PhpSpreadsheetTests/Functional/AbstractFunctional.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,20 @@ abstract class AbstractFunctional extends TestCase
1717
*
1818
* @param Spreadsheet $spreadsheet
1919
* @param string $format
20+
* @param null|callable $readerCustomizer
2021
*
2122
* @return Spreadsheet
2223
*/
23-
protected function writeAndReload(Spreadsheet $spreadsheet, $format)
24+
protected function writeAndReload(Spreadsheet $spreadsheet, $format, callable $readerCustomizer = null)
2425
{
2526
$filename = tempnam(File::sysGetTempDir(), 'phpspreadsheet-test');
2627
$writer = IOFactory::createWriter($spreadsheet, $format);
2728
$writer->save($filename);
2829

2930
$reader = IOFactory::createReader($format);
31+
if ($readerCustomizer) {
32+
$readerCustomizer($reader);
33+
}
3034
$reloadedSpreadsheet = $reader->load($filename);
3135
unlink($filename);
3236

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace PhpOffice\PhpSpreadsheetTests\Functional;
4+
5+
use PhpOffice\PhpSpreadsheet\Reader\BaseReader;
6+
use PhpOffice\PhpSpreadsheet\Spreadsheet;
7+
8+
class PrintAreaTest extends AbstractFunctional
9+
{
10+
public function providerFormats()
11+
{
12+
return [
13+
['Xls'],
14+
['Xlsx'],
15+
];
16+
}
17+
18+
/**
19+
* @dataProvider providerFormats
20+
*
21+
* @param string $format
22+
*/
23+
public function testPageSetup($format)
24+
{
25+
// Create new workbook with 3 sheets and different print areas
26+
$spreadsheet = new Spreadsheet();
27+
$worksheet1 = $spreadsheet->getActiveSheet()->setTitle('Sheet 1');
28+
$worksheet1->getPageSetup()->setPrintArea('A1:B1');
29+
30+
for ($i = 2; $i < 4; ++$i) {
31+
$sheet = $spreadsheet->createSheet()->setTitle("Sheet $i");
32+
$sheet->getPageSetup()->setPrintArea("A$i:B$i");
33+
}
34+
35+
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format, function (BaseReader $reader) {
36+
$reader->setLoadSheetsOnly(['Sheet 1', 'Sheet 3']);
37+
});
38+
39+
$actual1 = $reloadedSpreadsheet->getSheetByName('Sheet 1')->getPageSetup()->getPrintArea();
40+
$actual3 = $reloadedSpreadsheet->getSheetByName('Sheet 3')->getPageSetup()->getPrintArea();
41+
self::assertSame('A1:B1', $actual1, 'should be able to write and read normal page setup');
42+
self::assertSame('A3:B3', $actual3, 'should be able to write and read page setup even when skipping sheets');
43+
}
44+
}

0 commit comments

Comments
 (0)