@@ -94,4 +94,94 @@ public function testWriteNewPictureInCell(): void
9494
9595 $ reloadedSpreadsheet ->disconnectWorksheets ();
9696 }
97+
98+ public function testMoveImageInCell (): void
99+ {
100+ $ file = 'tests/data/Reader/XLSX/drawing_in_cell.xlsx ' ;
101+ $ reader = new Xlsx ();
102+ $ spreadsheet = $ reader ->load ($ file );
103+ $ sheet = $ spreadsheet ->getSheet (1 );
104+
105+ /** @var ?Drawing $drawing */
106+ $ drawing = $ sheet ->getCell ('D7 ' )->getValue ();
107+ if ($ drawing === null ) {
108+ self ::fail ('Unexpected null drawing ' );
109+ }
110+ $ originalWidth = $ drawing ->getWidth ();
111+ $ originalHeight = $ drawing ->getHeight ();
112+ $ sheet ->getCell ('D7 ' )->setValue (null );
113+ $ sheet ->getCell ('D8 ' )->setValue ($ drawing );
114+
115+ // Save spreadsheet to file and read it back
116+ $ reloadedSpreadsheet = $ this ->writeAndReload ($ spreadsheet , 'Xlsx ' );
117+ $ spreadsheet ->disconnectWorksheets ();
118+
119+ $ sheet = $ reloadedSpreadsheet ->getSheet (1 );
120+ $ drawings = $ sheet ->getInCellDrawingCollection ();
121+ self ::assertCount (1 , $ drawings );
122+
123+ /** @var ?Drawing $drawing */
124+ $ drawing = $ sheet ->getCell ('D8 ' )->getValue ();
125+
126+ if ($ drawing === null ) {
127+ self ::fail ('Unexpected null drawing ' );
128+ } else {
129+ self ::assertSame (IMAGETYPE_PNG , $ drawing ->getType ());
130+ self ::assertSame ('D8 ' , $ drawing ->getCoordinates ());
131+ self ::assertSame ($ originalWidth , $ drawing ->getWidth ());
132+ self ::assertSame ($ originalHeight , $ drawing ->getHeight ());
133+ }
134+
135+ $ reloadedSpreadsheet ->disconnectWorksheets ();
136+ }
137+
138+ public function testWriteSamePictureInCellAndAsFloating (): void
139+ {
140+ $ file = 'tests/data/Reader/XLSX/drawing_in_cell.xlsx ' ;
141+ $ reader = new Xlsx ();
142+ $ spreadsheet = $ reader ->load ($ file );
143+
144+ $ objDrawing = new Drawing ();
145+ $ objDrawing ->setPath ('tests/data/Writer/XLSX/blue_square.png ' );
146+
147+ $ sheet = $ spreadsheet ->getSheet (1 );
148+ $ sheet ->getCell ('C10 ' )->setValue ($ objDrawing );
149+
150+ $ objFloatingDrawing = new Drawing ();
151+ $ objFloatingDrawing ->setPath ('tests/data/Writer/XLSX/blue_square.png ' );
152+
153+ $ coordinates = $ sheet ->getCell ('B5 ' )->getCoordinate ();
154+ $ objFloatingDrawing ->setCoordinates ($ coordinates );
155+ $ objFloatingDrawing ->setOffsetX (1 );
156+ $ objFloatingDrawing ->setOffsetY (1 );
157+ $ objFloatingDrawing ->setWorksheet ($ sheet );
158+
159+ // Save spreadsheet to file and read it back
160+ $ reloadedSpreadsheet = $ this ->writeAndReload ($ spreadsheet , 'Xlsx ' );
161+ $ spreadsheet ->disconnectWorksheets ();
162+
163+ $ sheet = $ reloadedSpreadsheet ->getSheet (1 );
164+ $ drawings = $ sheet ->getInCellDrawingCollection ();
165+ self ::assertCount (2 , $ drawings );
166+
167+ /** @var ?Drawing $drawing */
168+ $ drawing = $ sheet ->getCell ('C10 ' )->getValue ();
169+
170+ if ($ drawing === null ) {
171+ self ::fail ('Unexpected null drawing ' );
172+ } else {
173+ self ::assertSame (IMAGETYPE_PNG , $ drawing ->getType ());
174+ self ::assertSame ('C10 ' , $ drawing ->getCoordinates ());
175+ self ::assertSame (100 , $ drawing ->getWidth ());
176+ self ::assertSame (100 , $ drawing ->getHeight ());
177+ }
178+
179+ $ floatingDrawings = $ sheet ->getDrawingCollection ();
180+
181+ self ::assertCount (1 , $ floatingDrawings );
182+ self ::assertSame ('B5 ' , $ floatingDrawings ->getIterator ()->current ()->getCoordinates ());
183+ self ::assertNull ($ sheet ->getCell ('B5 ' )->getValue ());
184+
185+ $ reloadedSpreadsheet ->disconnectWorksheets ();
186+ }
97187}
0 commit comments