@@ -211,6 +211,120 @@ public void TestIssue352()
211
211
}
212
212
}
213
213
214
+ [ Theory ]
215
+ [ InlineData ( true , 1 ) ]
216
+ [ InlineData ( false , 0 ) ]
217
+ public void TestIssue401 ( bool autoFilter , int count )
218
+ {
219
+ // Test for DataTable
220
+ {
221
+ DataTable table = new DataTable ( ) ;
222
+ {
223
+ table . Columns . Add ( "id" , typeof ( int ) ) ;
224
+ table . Columns . Add ( "name" , typeof ( string ) ) ;
225
+ table . Rows . Add ( 1 , "Jack" ) ;
226
+ table . Rows . Add ( 2 , "Mike" ) ;
227
+ }
228
+ DataTableReader reader = table . CreateDataReader ( ) ;
229
+ var path = Path . GetTempPath ( ) + Guid . NewGuid ( ) + ".xlsx" ;
230
+ var config = new OpenXmlConfiguration { AutoFilter = autoFilter } ;
231
+ MiniExcel . SaveAs ( path , reader , configuration : config ) ;
232
+ var xml = Helpers . GetZipFileContent ( path , "xl/worksheets/sheet1.xml" ) ;
233
+ var cnt = Regex . Matches ( xml , "<x:autoFilter ref=\" A1:B3\" />" ) . Count ;
234
+ Assert . Equal ( count , cnt ) ;
235
+ File . Delete ( path ) ;
236
+ }
237
+ {
238
+ DataTable table = new DataTable ( ) ;
239
+ {
240
+ table . Columns . Add ( "id" , typeof ( int ) ) ;
241
+ table . Columns . Add ( "name" , typeof ( string ) ) ;
242
+ table . Rows . Add ( 1 , "Jack" ) ;
243
+ table . Rows . Add ( 2 , "Mike" ) ;
244
+ }
245
+ DataTableReader reader = table . CreateDataReader ( ) ;
246
+ var path = Path . GetTempPath ( ) + Guid . NewGuid ( ) + ".xlsx" ;
247
+ var config = new OpenXmlConfiguration { AutoFilter = autoFilter } ;
248
+ MiniExcel . SaveAs ( path , reader , false , configuration : config ) ;
249
+ var xml = Helpers . GetZipFileContent ( path , "xl/worksheets/sheet1.xml" ) ;
250
+ var cnt = Regex . Matches ( xml , "<x:autoFilter ref=\" A1:B2\" />" ) . Count ;
251
+ Assert . Equal ( count , cnt ) ;
252
+ File . Delete ( path ) ;
253
+ }
254
+ {
255
+ DataTable table = new DataTable ( ) ;
256
+ {
257
+ table . Columns . Add ( "id" , typeof ( int ) ) ;
258
+ table . Columns . Add ( "name" , typeof ( string ) ) ;
259
+ }
260
+ DataTableReader reader = table . CreateDataReader ( ) ;
261
+ var path = Path . GetTempPath ( ) + Guid . NewGuid ( ) + ".xlsx" ;
262
+ var config = new OpenXmlConfiguration { AutoFilter = autoFilter } ;
263
+ MiniExcel . SaveAs ( path , reader , configuration : config ) ;
264
+ var xml = Helpers . GetZipFileContent ( path , "xl/worksheets/sheet1.xml" ) ;
265
+ var cnt = Regex . Matches ( xml , "<x:autoFilter ref=\" A1:B1\" />" ) . Count ;
266
+ Assert . Equal ( count , cnt ) ;
267
+ File . Delete ( path ) ;
268
+ }
269
+
270
+ // Test for DataReader
271
+ {
272
+ var path = Path . Combine ( Path . GetTempPath ( ) , $ "{ Guid . NewGuid ( ) } .xlsx") ;
273
+ var config = new OpenXmlConfiguration { AutoFilter = autoFilter } ;
274
+ using ( var connection = Db . GetConnection ( "Data Source=:memory:" ) )
275
+ {
276
+ using var command = new SQLiteCommand ( @"select 'MiniExcel' as Column1,1 as Column2 union all select 'Github',2" , connection ) ;
277
+ connection . Open ( ) ;
278
+ using var reader = command . ExecuteReader ( ) ;
279
+ MiniExcel . SaveAs ( path , reader , configuration : config ) ;
280
+ }
281
+ var xml = Helpers . GetZipFileContent ( path , "xl/worksheets/sheet1.xml" ) ;
282
+ var cnt = Regex . Matches ( xml , "autoFilter" ) . Count ;
283
+ Assert . Equal ( count , cnt ) ;
284
+ File . Delete ( path ) ;
285
+ }
286
+
287
+ {
288
+ var xlsxPath = @"../../../../../samples/xlsx/Test5x2.xlsx" ;
289
+ var tempSqlitePath = Path . Combine ( Path . GetTempPath ( ) , $ "{ Guid . NewGuid ( ) } .db") ;
290
+ var connectionString = $ "Data Source={ tempSqlitePath } ;Version=3;";
291
+
292
+ using ( var connection = new SQLiteConnection ( connectionString ) )
293
+ {
294
+ connection . Execute ( @"create table T (A varchar(20),B varchar(20));" ) ;
295
+ }
296
+
297
+ using ( var connection = new SQLiteConnection ( connectionString ) )
298
+ {
299
+ connection . Open ( ) ;
300
+ using ( var transaction = connection . BeginTransaction ( ) )
301
+ using ( var stream = File . OpenRead ( xlsxPath ) )
302
+ {
303
+ var rows = stream . Query ( ) ;
304
+ foreach ( var row in rows )
305
+ connection . Execute ( "insert into T (A,B) values (@A,@B)" , new { row . A , row . B } , transaction : transaction ) ;
306
+ transaction . Commit ( ) ;
307
+ }
308
+ }
309
+
310
+ var path = Path . Combine ( Path . GetTempPath ( ) , $ "{ Guid . NewGuid ( ) } .xlsx") ;
311
+ var config = new OpenXmlConfiguration { AutoFilter = autoFilter } ;
312
+ using ( var connection = new SQLiteConnection ( connectionString ) )
313
+ {
314
+ using var command = new SQLiteCommand ( "select * from T" , connection ) ;
315
+ connection . Open ( ) ;
316
+ using var reader = command . ExecuteReader ( ) ;
317
+ MiniExcel . SaveAs ( path , reader , configuration : config ) ;
318
+ }
319
+
320
+ var xml = Helpers . GetZipFileContent ( path , "xl/worksheets/sheet1.xml" ) ;
321
+ var cnt = Regex . Matches ( xml , "autoFilter" ) . Count ;
322
+ Assert . Equal ( count , cnt ) ;
323
+ File . Delete ( path ) ;
324
+ File . Delete ( tempSqlitePath ) ;
325
+ }
326
+ }
327
+
214
328
[ Fact ]
215
329
public async Task TestIssue307 ( )
216
330
{
0 commit comments