diff --git a/src/PhpSpreadsheet/Writer/Xlsx.php b/src/PhpSpreadsheet/Writer/Xlsx.php index e127ccac9..85f8872ee 100644 --- a/src/PhpSpreadsheet/Writer/Xlsx.php +++ b/src/PhpSpreadsheet/Writer/Xlsx.php @@ -400,7 +400,7 @@ class Xlsx extends BaseWriter } // Add unparsed drawings - if (isset($unparsedLoadedData['sheets'][$sheetCodeName]['Drawings'])) { + if (isset($unparsedLoadedData['sheets'][$sheetCodeName]['Drawings']) && !isset($zipContent['xl/drawings/drawing' . ($i + 1) . '.xml'])) { foreach ($unparsedLoadedData['sheets'][$sheetCodeName]['Drawings'] as $relId => $drawingXml) { $drawingFile = array_search($relId, $unparsedLoadedData['sheets'][$sheetCodeName]['drawingOriginalIds']); if ($drawingFile !== false) { diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue3843Test.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue3843Test.php new file mode 100644 index 000000000..a4a6211f6 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue3843Test.php @@ -0,0 +1,55 @@ +', $data); + } + } + + public function testUnusedDrawingsInOriginal(): void + { + $reader = new XlsxReader(); + $spreadsheet = $reader->load(self::TEMPLATE); + $sheet = $spreadsheet->getActiveSheet(); + $drawings = $sheet->getDrawingCollection(); + self::assertCount(0, $drawings); + $drawing = new Drawing(); + $drawing->setName('TestDrawing'); + $drawing->setPath(self::IMAGE); + $drawing->setCoordinates('A2'); + $drawing->setWidth(100); + $drawing->setHeight(100); + $drawing->setResizeProportional(false); + $drawing->setWorksheet($sheet); + // Save spreadsheet to file and read it back + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx'); + $spreadsheet->disconnectWorksheets(); + $drawings = $reloadedSpreadsheet->getActiveSheet()->getDrawingCollection(); + self::assertCount(1, $drawings); + $drawing = $drawings[0]; + self::assertSame('TestDrawing', $drawing?->getName()); + $reloadedSpreadsheet->disconnectWorksheets(); + } +} diff --git a/tests/data/Writer/XLSX/issue.3843a.jpg b/tests/data/Writer/XLSX/issue.3843a.jpg new file mode 100644 index 000000000..1946bc188 Binary files /dev/null and b/tests/data/Writer/XLSX/issue.3843a.jpg differ diff --git a/tests/data/Writer/XLSX/issue.3843a.template.xlsx b/tests/data/Writer/XLSX/issue.3843a.template.xlsx new file mode 100644 index 000000000..2f5a817b6 Binary files /dev/null and b/tests/data/Writer/XLSX/issue.3843a.template.xlsx differ