From cadeb88d4baadf9d525958d012fdd2ed077afec2 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Wed, 21 May 2025 19:15:20 -0700 Subject: [PATCH 1/2] Xlsx Reader Do Not Process Printer Settings for Dataonly Fix #4477. Xlsx Spreadsheet could be loaded and saved normally, but, when the load specified Dataonly, the output file was corrupt. Reader is changed to not process Printer Settings when Dataonly is in effect. --- src/PhpSpreadsheet/Reader/Xlsx.php | 3 + .../Reader/Xlsx/Issue4477Test.php | 73 ++++++++++++++++++ .../Reader/XLSX/issue.4477.disclaimer.xlsx | Bin 0 -> 34206 bytes 3 files changed, 76 insertions(+) create mode 100644 tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4477Test.php create mode 100644 tests/data/Reader/XLSX/issue.4477.disclaimer.xlsx diff --git a/src/PhpSpreadsheet/Reader/Xlsx.php b/src/PhpSpreadsheet/Reader/Xlsx.php index b13114ab47..b60bf047bf 100644 --- a/src/PhpSpreadsheet/Reader/Xlsx.php +++ b/src/PhpSpreadsheet/Reader/Xlsx.php @@ -2231,6 +2231,9 @@ private function readFormControlProperties(Spreadsheet $excel, string $dir, stri /** @param mixed[][][][] $unparsedLoadedData */ private function readPrinterSettings(Spreadsheet $excel, string $dir, string $fileWorksheet, Worksheet $docSheet, array &$unparsedLoadedData): void { + if ($this->readDataOnly) { + return; + } $zip = $this->zip; if ($zip->locateName(dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels') === false) { return; diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4477Test.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4477Test.php new file mode 100644 index 0000000000..814e0daf79 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue4477Test.php @@ -0,0 +1,73 @@ +tempfile !== '') { + unlink($this->tempfile); + $this->tempfile = ''; + } + } + + public function testDataonlyNoPrinter(): void + { + // Need to ignore printer settings when Read Dataonly + $infile = 'tests/data/Reader/XLSX/issue.4477.disclaimer.xlsx'; + $zip = new ZipArchive(); + if ($zip->open($infile) !== true) { + self::fail("failed to open $infile"); + } + $num = $zip->numFiles; + $foundPrinter = $foundWorksheet = false; + for ($i = 0; $i < $num; ++$i) { + $filename = (string) $zip->getNameIndex($i); + if (str_contains($filename, 'printer')) { + $foundPrinter = true; + } elseif ($filename === 'xl/worksheets/sheet1.xml') { + $foundWorksheet = true; + } + } + $zip->close(); + self::assertTrue($foundPrinter); + self::assertTrue($foundWorksheet); + + $reader = new XlsxReader(); + $reader->setReadDataOnly(true); + $spreadsheet = $reader->load($infile); + $writer = new XlsxWriter($spreadsheet); + $this->tempfile = File::temporaryFileName(); + $writer->save($this->tempfile); + $spreadsheet->disconnectWorksheets(); + + $zip = new ZipArchive(); + if ($zip->open($this->tempfile) !== true) { + self::fail("failed to open {$infile}"); + } + $num = $zip->numFiles; + $foundPrinter = $foundWorksheet = false; + for ($i = 0; $i < $num; ++$i) { + $filename = (string) $zip->getNameIndex($i); + if (str_contains($filename, 'printer')) { + $foundPrinter = true; + } elseif ($filename === 'xl/worksheets/sheet1.xml') { + $foundWorksheet = true; + } + } + $zip->close(); + self::assertFalse($foundPrinter); + self::assertTrue($foundWorksheet); + } +} diff --git a/tests/data/Reader/XLSX/issue.4477.disclaimer.xlsx b/tests/data/Reader/XLSX/issue.4477.disclaimer.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..619e8093c8be1342736b0f99e23482bdad5b33c3 GIT binary patch literal 34206 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 RpfWQy&=cTOu;=%^{{wB6(<}f0 literal 0 HcmV?d00001 From 0cbaf103d3250b7678bd74474852fdc451e4a648 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Fri, 23 May 2025 11:43:47 -0700 Subject: [PATCH 2/2] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3420e60a45..fdbc602ab6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,7 +34,8 @@ and this project adheres to [Semantic Versioning](https://semver.org). - Print Area and Row Break. [Issue #1275](https://github.com/PHPOffice/PhpSpreadsheet/issues/1275) [PR #4450](https://github.com/PHPOffice/PhpSpreadsheet/pull/4450) - Copy Styles after insertNewColumnBefore. [Issue #1425](https://github.com/PHPOffice/PhpSpreadsheet/issues/1425) [PR #4468](https://github.com/PHPOffice/PhpSpreadsheet/pull/4468) - Xls Writer Treat Hyperlink Starting with # as Internal. [Issue #56](https://github.com/PHPOffice/PhpSpreadsheet/issues/56) [PR #4453](https://github.com/PHPOffice/PhpSpreadsheet/pull/4453) -- ODS Handling of Ceiling and Floor. [Issue #407](https://github.com/PHPOffice/PhpSpreadsheet/issues/407) [PR #4466](https://github.com/PHPOffice/PhpSpreadsheet/pull/4466) +- ODS Handling of Ceiling and Floor. [Issue #477](https://github.com/PHPOffice/PhpSpreadsheet/issues/407) [PR #4466](https://github.com/PHPOffice/PhpSpreadsheet/pull/4466) +- Xlsx Reader Do Not Process Printer Settings for Dataonly. [Issue #4477](https://github.com/PHPOffice/PhpSpreadsheet/issues/4477) [PR #4480](https://github.com/PHPOffice/PhpSpreadsheet/pull/4480) ## 2025-04-16 - 4.2.0