@@ -116,6 +116,122 @@ public function testArrayOutput(): void
116
116
self ::assertSame ($ expectedSort , $ sheet2 ->getCell ('D1 ' )->getCalculatedValue ());
117
117
$ spreadsheet2 ->disconnectWorksheets ();
118
118
119
+ $ file = 'zip:// ' ;
120
+ $ file .= $ this ->outputFile ;
121
+ $ file .= '#xl/worksheets/sheet1.xml ' ;
122
+ $ data = file_get_contents ($ file );
123
+ if ($ data === false ) {
124
+ self ::fail ('Unable to read file ' );
125
+ } else {
126
+ self ::assertStringContainsString ('<c r="C1" cm="1"><f t="array" ref="C1:C15" aca="1" ca="1">_xlfn.UNIQUE(A1:A19)</f><v>41</v></c> ' , $ data , '15 results for UNIQUE ' );
127
+ self ::assertStringContainsString ('<c r="D1" cm="1"><f t="array" ref="D1:D19" aca="1" ca="1">_xlfn._xlws.SORT(A1:A19)</f><v>26</v></c> ' , $ data , '19 results for SORT ' );
128
+ }
129
+
130
+ $ file = 'zip:// ' ;
131
+ $ file .= $ this ->outputFile ;
132
+ $ file .= '#xl/metadata.xml ' ;
133
+ $ data = @file_get_contents ($ file );
134
+ self ::assertNotFalse ($ data , 'metadata.xml should exist ' );
135
+
136
+ $ file = 'zip:// ' ;
137
+ $ file .= $ this ->outputFile ;
138
+ $ file .= '#[Content_Types].xml ' ;
139
+ $ data = file_get_contents ($ file );
140
+ self ::assertStringContainsString ('metadata ' , $ data );
141
+
142
+ $ file = 'zip:// ' ;
143
+ $ file .= $ this ->outputFile ;
144
+ $ file .= '#xl/_rels/workbook.xml.rels ' ;
145
+ $ data = file_get_contents ($ file );
146
+ self ::assertStringContainsString ('metadata ' , $ data );
147
+ }
148
+
149
+ public function testArrayOutputCSE (): void
150
+ {
151
+ Calculation::setArrayReturnType (Calculation::RETURN_ARRAY_AS_ARRAY );
152
+ $ spreadsheet = new Spreadsheet ();
153
+ $ sheet = $ spreadsheet ->getActiveSheet ();
154
+ $ columnArray = [
155
+ [41 ],
156
+ [57 ],
157
+ [51 ],
158
+ [54 ],
159
+ [49 ],
160
+ [43 ],
161
+ [35 ],
162
+ [35 ],
163
+ [44 ],
164
+ [47 ],
165
+ [48 ],
166
+ [26 ],
167
+ [57 ],
168
+ [34 ],
169
+ [61 ],
170
+ [34 ],
171
+ [28 ],
172
+ [29 ],
173
+ [41 ],
174
+ ];
175
+ $ sheet ->fromArray ($ columnArray , 'A1 ' );
176
+ $ sheet ->setCellValue ('C1 ' , '=UNIQUE(A1:A19) ' );
177
+ $ sheet ->setCellValue ('D1 ' , '=SORT(A1:A19) ' );
178
+ $ writer = new XlsxWriter ($ spreadsheet );
179
+ $ this ->outputFile = File::temporaryFilename ();
180
+ $ writer ->setUseCSEArrays (true );
181
+ $ writer ->save ($ this ->outputFile );
182
+ $ spreadsheet ->disconnectWorksheets ();
183
+
184
+ $ reader = new XlsxReader ();
185
+ $ spreadsheet2 = $ reader ->load ($ this ->outputFile );
186
+ $ sheet2 = $ spreadsheet2 ->getActiveSheet ();
187
+ $ expectedUnique = [
188
+ [41 ],
189
+ [57 ],
190
+ [51 ],
191
+ [54 ],
192
+ [49 ],
193
+ [43 ],
194
+ [35 ],
195
+ [44 ],
196
+ [47 ],
197
+ [48 ],
198
+ [26 ],
199
+ [34 ],
200
+ [61 ],
201
+ [28 ],
202
+ [29 ],
203
+ ];
204
+ self ::assertCount (15 , $ expectedUnique );
205
+ self ::assertSame ($ expectedUnique , $ sheet2 ->getCell ('C1 ' )->getCalculatedValue ());
206
+ for ($ row = 2 ; $ row <= 15 ; ++$ row ) {
207
+ self ::assertSame ($ expectedUnique [$ row - 1 ][0 ], $ sheet2 ->getCell ("C $ row " )->getCalculatedValue (), "cell C $ row " );
208
+ }
209
+ $ expectedSort = [
210
+ [26 ],
211
+ [28 ],
212
+ [29 ],
213
+ [34 ],
214
+ [34 ],
215
+ [35 ],
216
+ [35 ],
217
+ [41 ],
218
+ [41 ],
219
+ [43 ],
220
+ [44 ],
221
+ [47 ],
222
+ [48 ],
223
+ [49 ],
224
+ [51 ],
225
+ [54 ],
226
+ [57 ],
227
+ [57 ],
228
+ [61 ],
229
+ ];
230
+ self ::assertCount (19 , $ expectedSort );
231
+ self ::assertCount (19 , $ columnArray );
232
+ self ::assertSame ($ expectedSort , $ sheet2 ->getCell ('D1 ' )->getCalculatedValue ());
233
+ $ spreadsheet2 ->disconnectWorksheets ();
234
+
119
235
$ file = 'zip:// ' ;
120
236
$ file .= $ this ->outputFile ;
121
237
$ file .= '#xl/worksheets/sheet1.xml ' ;
@@ -126,6 +242,24 @@ public function testArrayOutput(): void
126
242
self ::assertStringContainsString ('<c r="C1"><f t="array" ref="C1:C15" aca="1" ca="1">_xlfn.UNIQUE(A1:A19)</f><v>41</v></c> ' , $ data , '15 results for UNIQUE ' );
127
243
self ::assertStringContainsString ('<c r="D1"><f t="array" ref="D1:D19" aca="1" ca="1">_xlfn._xlws.SORT(A1:A19)</f><v>26</v></c> ' , $ data , '19 results for SORT ' );
128
244
}
245
+
246
+ $ file = 'zip:// ' ;
247
+ $ file .= $ this ->outputFile ;
248
+ $ file .= '#xl/metadata.xml ' ;
249
+ $ data = @file_get_contents ($ file );
250
+ self ::assertFalse ($ data , 'metadata.xml should not exist ' );
251
+
252
+ $ file = 'zip:// ' ;
253
+ $ file .= $ this ->outputFile ;
254
+ $ file .= '#[Content_Types].xml ' ;
255
+ $ data = file_get_contents ($ file );
256
+ self ::assertStringNotContainsString ('metadata ' , $ data );
257
+
258
+ $ file = 'zip:// ' ;
259
+ $ file .= $ this ->outputFile ;
260
+ $ file .= '#xl/_rels/workbook.xml.rels ' ;
261
+ $ data = file_get_contents ($ file );
262
+ self ::assertStringNotContainsString ('metadata ' , $ data );
129
263
}
130
264
131
265
public function testUnimplementedArrayOutput (): void
0 commit comments