Files
oleibman dbb560a923 Do Not Include Unparsed Loaded Drawings When Drawing is Added
Fix #3843. Spreadsheet XML had a lingering Xml drawing tag despite having no drawings. When a new drawing was added, PhpSpreadsheet became confused about which drawings to keep. This PR ensures that it keeps the new and drops the old.
2023-12-28 22:32:09 -08:00

56 lines
2.0 KiB
PHP

<?php
declare(strict_types=1);
namespace PhpOffice\PhpSpreadsheetTests\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
class Issue3843Test extends AbstractFunctional
{
private const DIRECTORY = 'tests/data/Writer/XLSX/';
private const TEMPLATE = self::DIRECTORY . 'issue.3843a.template.xlsx';
private const IMAGE = self::DIRECTORY . 'issue.3843a.jpg';
public function testPreliminaries(): void
{
$file = 'zip://';
$file .= self::TEMPLATE;
$file .= '#xl/worksheets/sheet1.xml';
$data = file_get_contents($file);
// confirm that file contains expected namespaced xml tag
if ($data === false) {
self::fail('Unable to read file');
} else {
self::assertStringContainsString('<drawing r:id="rId2"/>', $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();
}
}