@@ -153,24 +153,49 @@ public function writeChart(XMLWriter $objWriter, \PhpOffice\PhpSpreadsheet\Chart
153
153
public function writeDrawing (XMLWriter $ objWriter , BaseDrawing $ drawing , $ relationId = -1 , $ hlinkClickId = null ): void
154
154
{
155
155
if ($ relationId >= 0 ) {
156
- // xdr:oneCellAnchor
157
- $ objWriter ->startElement ('xdr:oneCellAnchor ' );
158
- // Image location
159
- $ aCoordinates = Coordinate::indexesFromString ($ drawing ->getCoordinates ());
160
-
161
- // xdr:from
162
- $ objWriter ->startElement ('xdr:from ' );
163
- $ objWriter ->writeElement ('xdr:col ' , $ aCoordinates [0 ] - 1 );
164
- $ objWriter ->writeElement ('xdr:colOff ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getOffsetX ()));
165
- $ objWriter ->writeElement ('xdr:row ' , $ aCoordinates [1 ] - 1 );
166
- $ objWriter ->writeElement ('xdr:rowOff ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getOffsetY ()));
167
- $ objWriter ->endElement ();
156
+ $ isTwoCellAnchor = $ drawing ->getCoordinates2 () !== null ;
157
+ if ($ isTwoCellAnchor ) {
158
+ // xdr:twoCellAnchor
159
+ $ objWriter ->startElement ('xdr:twoCellAnchor ' );
160
+ // Image location
161
+ $ aCoordinates = Coordinate::indexesFromString ($ drawing ->getCoordinates ());
162
+ $ aCoordinates2 = Coordinate::indexesFromString ($ drawing ->getCoordinates2 ());
163
+
164
+ // xdr:from
165
+ $ objWriter ->startElement ('xdr:from ' );
166
+ $ objWriter ->writeElement ('xdr:col ' , $ aCoordinates [0 ] - 1 );
167
+ $ objWriter ->writeElement ('xdr:colOff ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getOffsetX ()));
168
+ $ objWriter ->writeElement ('xdr:row ' , $ aCoordinates [1 ] - 1 );
169
+ $ objWriter ->writeElement ('xdr:rowOff ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getOffsetY ()));
170
+ $ objWriter ->endElement ();
168
171
169
- // xdr:ext
170
- $ objWriter ->startElement ('xdr:ext ' );
171
- $ objWriter ->writeAttribute ('cx ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getWidth ()));
172
- $ objWriter ->writeAttribute ('cy ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getHeight ()));
173
- $ objWriter ->endElement ();
172
+ // xdr:to
173
+ $ objWriter ->startElement ('xdr:to ' );
174
+ $ objWriter ->writeElement ('xdr:col ' , $ aCoordinates2 [0 ] - 1 );
175
+ $ objWriter ->writeElement ('xdr:colOff ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getOffsetX2 ()));
176
+ $ objWriter ->writeElement ('xdr:row ' , $ aCoordinates2 [1 ] - 1 );
177
+ $ objWriter ->writeElement ('xdr:rowOff ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getOffsetY2 ()));
178
+ $ objWriter ->endElement ();
179
+ } else {
180
+ // xdr:oneCellAnchor
181
+ $ objWriter ->startElement ('xdr:oneCellAnchor ' );
182
+ // Image location
183
+ $ aCoordinates = Coordinate::indexesFromString ($ drawing ->getCoordinates ());
184
+
185
+ // xdr:from
186
+ $ objWriter ->startElement ('xdr:from ' );
187
+ $ objWriter ->writeElement ('xdr:col ' , $ aCoordinates [0 ] - 1 );
188
+ $ objWriter ->writeElement ('xdr:colOff ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getOffsetX ()));
189
+ $ objWriter ->writeElement ('xdr:row ' , $ aCoordinates [1 ] - 1 );
190
+ $ objWriter ->writeElement ('xdr:rowOff ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getOffsetY ()));
191
+ $ objWriter ->endElement ();
192
+
193
+ // xdr:ext
194
+ $ objWriter ->startElement ('xdr:ext ' );
195
+ $ objWriter ->writeAttribute ('cx ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getWidth ()));
196
+ $ objWriter ->writeAttribute ('cy ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getHeight ()));
197
+ $ objWriter ->endElement ();
198
+ }
174
199
175
200
// xdr:pic
176
201
$ objWriter ->startElement ('xdr:pic ' );
@@ -223,6 +248,12 @@ public function writeDrawing(XMLWriter $objWriter, BaseDrawing $drawing, $relati
223
248
// a:xfrm
224
249
$ objWriter ->startElement ('a:xfrm ' );
225
250
$ objWriter ->writeAttribute ('rot ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::degreesToAngle ($ drawing ->getRotation ()));
251
+ if ($ isTwoCellAnchor ) {
252
+ $ objWriter ->startElement ('a:ext ' );
253
+ $ objWriter ->writeAttribute ('cx ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getWidth ()));
254
+ $ objWriter ->writeAttribute ('cy ' , \PhpOffice \PhpSpreadsheet \Shared \Drawing::pixelsToEMU ($ drawing ->getHeight ()));
255
+ $ objWriter ->endElement ();
256
+ }
226
257
$ objWriter ->endElement ();
227
258
228
259
// a:prstGeom
0 commit comments