@@ -116,7 +116,7 @@ public void TestGroupResultVertical()
116116 {
117117 var wb = new XLWorkbook ( ) ;
118118 var ws = wb . AddWorksheet ( "Test" ) ;
119- var range = ws . Range ( 2 , 2 , 9 , 6 ) ;
119+ var range = ws . Range ( 2 , 2 , 9 , 12 ) ;
120120
121121 ws . Cell ( 2 , 2 ) . Value = "One" ;
122122 ws . Cell ( 3 , 2 ) . Value = "One" ;
@@ -164,10 +164,66 @@ public void TestGroupResultVertical()
164164 ws . Cell ( 8 , 6 ) . Value = new DateTime ( 2018 , 2 , 21 ) ;
165165 ws . Cell ( 9 , 6 ) . Value = new DateTime ( 2018 , 2 , 21 ) . ToString ( ) ;
166166
167+ ws . Cell ( 1 , 7 ) . Value = "One" ;
168+ ws . Cell ( 2 , 7 ) . Value = "One" ;
169+ ws . Cell ( 10 , 7 ) . Value = "One" ;
170+
171+ ws . Range ( 2 , 7 , 9 , 7 ) . Merge ( ) ;
172+
173+ ws . Cell ( 1 , 8 ) . Value = "Two" ;
174+ ws . Cell ( 2 , 8 ) . Value = "Two" ;
175+ ws . Cell ( 3 , 8 ) . Value = "One" ;
176+ ws . Cell ( 10 , 8 ) . Value = "One" ;
177+
178+ ws . Range ( 3 , 8 , 9 , 8 ) . Merge ( ) ;
179+
180+ ws . Cell ( 1 , 9 ) . Value = "One" ;
181+ ws . Cell ( 2 , 9 ) . Value = "One" ;
182+ ws . Cell ( 9 , 9 ) . Value = "Two" ;
183+ ws . Cell ( 10 , 9 ) . Value = "Two" ;
184+
185+ ws . Range ( 2 , 9 , 8 , 9 ) . Merge ( ) ;
186+
187+ ws . Cell ( 1 , 10 ) . Value = "One" ;
188+ ws . Cell ( 2 , 10 ) . Value = "One" ;
189+ ws . Cell ( 3 , 10 ) . Value = "One" ;
190+ ws . Cell ( 6 , 10 ) . Value = "One" ;
191+ ws . Cell ( 8 , 10 ) . Value = "Two" ;
192+ ws . Cell ( 9 , 10 ) . Value = "Two" ;
193+ ws . Cell ( 10 , 10 ) . Value = "Two" ;
194+
195+ ws . Range ( 3 , 10 , 5 , 10 ) . Merge ( ) ;
196+ ws . Range ( 6 , 10 , 7 , 10 ) . Merge ( ) ;
197+
198+ ws . Cell ( 1 , 11 ) . Value = "Two" ;
199+ ws . Cell ( 2 , 11 ) . Value = "Two" ;
200+ ws . Cell ( 3 , 11 ) . Value = "One" ;
201+ ws . Cell ( 5 , 11 ) . Value = "One" ;
202+ ws . Cell ( 6 , 11 ) . Value = "One" ;
203+ ws . Cell ( 8 , 11 ) . Value = "Two" ;
204+ ws . Cell ( 9 , 11 ) . Value = "Two" ;
205+ ws . Cell ( 10 , 11 ) . Value = "Two" ;
206+
207+ ws . Range ( 3 , 11 , 4 , 11 ) . Merge ( ) ;
208+ ws . Range ( 6 , 11 , 8 , 11 ) . Merge ( ) ;
209+
210+ ws . Cell ( 1 , 12 ) . Value = "One" ;
211+ ws . Cell ( 2 , 12 ) . Value = "One" ;
212+ ws . Cell ( 3 , 12 ) . Value = "One" ;
213+ ws . Cell ( 6 , 12 ) . Value = "One" ;
214+ ws . Cell ( 8 , 12 ) . Value = "Two" ;
215+ ws . Cell ( 9 , 12 ) . Value = "Two" ;
216+ ws . Cell ( 10 , 12 ) . Value = "Two" ;
217+
218+ ws . Range ( 1 , 12 , 2 , 12 ) . Merge ( ) ;
219+ ws . Range ( 3 , 12 , 5 , 12 ) . Merge ( ) ;
220+ ws . Range ( 6 , 12 , 7 , 12 ) . Merge ( ) ;
221+ ws . Range ( 9 , 12 , 10 , 12 ) . Merge ( ) ;
222+
167223 var panel = new ExcelDataSourcePanel ( "Stub" , Substitute . For < IXLNamedRange > ( ) , new object ( ) ,
168224 Substitute . For < ITemplateProcessor > ( ) )
169225 {
170- GroupBy = "1,2, 3 , 4,5"
226+ GroupBy = "1,2, 3 , 4,5,6,7,8,9,10,11" ,
171227 } ;
172228
173229 var method = panel . GetType ( ) . GetMethod ( "GroupResult" , BindingFlags . Instance | BindingFlags . NonPublic ) ;
@@ -180,12 +236,83 @@ public void TestGroupResultVertical()
180236 //wb.SaveAs("test.xlsx");
181237 }
182238
239+ [ Test ]
240+ public void TestGroupResultVertical_WithoutGroupingBlankValues ( )
241+ {
242+ var wb = new XLWorkbook ( ) ;
243+ var ws = wb . AddWorksheet ( "Test" ) ;
244+ var range = ws . Range ( 2 , 2 , 9 , 7 ) ;
245+
246+ ws . Cell ( 2 , 2 ) . Value = "One" ;
247+ ws . Cell ( 3 , 2 ) . Value = "One" ;
248+ ws . Cell ( 4 , 2 ) . Value = "Two" ;
249+ ws . Cell ( 5 , 2 ) . Value = "Three" ;
250+ ws . Cell ( 6 , 2 ) . Value = "Three" ;
251+ ws . Cell ( 7 , 2 ) . Value = "Three" ;
252+
253+ ws . Range ( 5 , 2 , 6 , 2 ) . Merge ( ) ;
254+
255+ ws . Cell ( 2 , 3 ) . Value = "Orange" ;
256+ ws . Cell ( 3 , 3 ) . Value = "Apple" ;
257+ ws . Cell ( 4 , 3 ) . Value = "Apple" ;
258+ ws . Cell ( 5 , 3 ) . Value = Blank . Value ;
259+ ws . Cell ( 6 , 3 ) . Value = Blank . Value ;
260+ ws . Cell ( 8 , 3 ) . Value = "Pear" ;
261+ ws . Cell ( 9 , 3 ) . Value = "Pear" ;
262+
263+ ws . Cell ( 2 , 4 ) . Value = true ;
264+ ws . Cell ( 3 , 4 ) . Value = true ;
265+ ws . Cell ( 4 , 4 ) . Value = 1 ;
266+ ws . Cell ( 7 , 4 ) . Value = 0 ;
267+ ws . Cell ( 8 , 4 ) . Value = false ;
268+ ws . Cell ( 9 , 4 ) . Value = false ;
269+
270+ ws . Cell ( 2 , 5 ) . Value = 1 ;
271+ ws . Cell ( 3 , 5 ) . Value = 1 ;
272+ ws . Cell ( 4 , 5 ) . Value = 1 ;
273+ ws . Cell ( 5 , 5 ) . Value = 56 ;
274+ ws . Cell ( 6 , 5 ) . Value = 56.1 ;
275+ ws . Cell ( 7 , 5 ) . Value = 56 ;
276+ ws . Cell ( 8 , 5 ) . Value = 77.7 ;
277+ ws . Cell ( 9 , 5 ) . Value = 77.7m ;
278+
279+ ws . Range ( 3 , 5 , 4 , 5 ) . Merge ( ) ;
280+
281+ ws . Cell ( 2 , 6 ) . Value = new DateTime ( 2018 , 2 , 18 ) ;
282+ ws . Cell ( 3 , 6 ) . Value = new DateTime ( 2018 , 2 , 20 ) ;
283+ ws . Cell ( 4 , 6 ) . Value = new DateTime ( 2018 , 2 , 20 ) ;
284+ ws . Cell ( 5 , 6 ) . Value = new DateTime ( 2018 , 2 , 18 ) ;
285+
286+ ws . Range ( 6 , 6 , 8 , 6 ) . Merge ( ) ;
287+
288+ ws . Cell ( 5 , 7 ) . Value = "Value" ;
289+ ws . Cell ( 6 , 7 ) . Value = "Value" ;
290+
291+ ws . Range ( 2 , 7 , 3 , 7 ) . Merge ( ) ;
292+
293+ var panel = new ExcelDataSourcePanel ( "Stub" , Substitute . For < IXLNamedRange > ( ) , new object ( ) ,
294+ Substitute . For < ITemplateProcessor > ( ) )
295+ {
296+ GroupBy = "1,2, 3 , 4,5,6" ,
297+ GroupBlankValues = false
298+ } ;
299+
300+ var method = panel . GetType ( ) . GetMethod ( "GroupResult" , BindingFlags . Instance | BindingFlags . NonPublic ) ;
301+ SetResultRange ( panel , range ) ;
302+ method . Invoke ( panel , null ) ;
303+
304+ ExcelAssert . AreWorkbooksContentEquals (
305+ TestHelper . GetExpectedWorkbook ( nameof ( ExcelDataSourcePanelTest ) , nameof ( TestGroupResultVertical_WithoutGroupingBlankValues ) ) , wb ) ;
306+
307+ //wb.SaveAs("test.xlsx");
308+ }
309+
183310 [ Test ]
184311 public void TestGroupResultHorizontal ( )
185312 {
186313 var wb = new XLWorkbook ( ) ;
187314 var ws = wb . AddWorksheet ( "Test" ) ;
188- var range = ws . Range ( 2 , 2 , 6 , 9 ) ;
315+ var range = ws . Range ( 2 , 2 , 12 , 9 ) ;
189316
190317 ws . Cell ( 2 , 2 ) . Value = "One" ;
191318 ws . Cell ( 2 , 3 ) . Value = "One" ;
@@ -201,15 +328,12 @@ public void TestGroupResultHorizontal()
201328 ws . Cell ( 3 , 2 ) . Value = "Orange" ;
202329 ws . Cell ( 3 , 3 ) . Value = "Apple" ;
203330 ws . Cell ( 3 , 4 ) . Value = "Apple" ;
204- ws . Cell ( 3 , 5 ) . Value = Blank . Value ;
205- ws . Cell ( 3 , 6 ) . Value = Blank . Value ;
206331 ws . Cell ( 3 , 8 ) . Value = "Pear" ;
207332 ws . Cell ( 3 , 9 ) . Value = "Pear" ;
208333
209334 ws . Cell ( 4 , 2 ) . Value = true ;
210335 ws . Cell ( 4 , 3 ) . Value = true ;
211336 ws . Cell ( 4 , 4 ) . Value = 1 ;
212- ws . Cell ( 4 , 5 ) . Value = Blank . Value ;
213337 ws . Cell ( 4 , 7 ) . Value = 0 ;
214338 ws . Cell ( 4 , 8 ) . Value = false ;
215339 ws . Cell ( 4 , 9 ) . Value = false ;
@@ -233,10 +357,66 @@ public void TestGroupResultHorizontal()
233357 ws . Cell ( 6 , 8 ) . Value = new DateTime ( 2018 , 2 , 21 ) ;
234358 ws . Cell ( 6 , 9 ) . Value = new DateTime ( 2018 , 2 , 21 ) . ToString ( ) ;
235359
360+ ws . Cell ( 7 , 1 ) . Value = "One" ;
361+ ws . Cell ( 7 , 2 ) . Value = "One" ;
362+ ws . Cell ( 7 , 10 ) . Value = "One" ;
363+
364+ ws . Range ( 7 , 2 , 7 , 9 ) . Merge ( ) ;
365+
366+ ws . Cell ( 8 , 1 ) . Value = "Two" ;
367+ ws . Cell ( 8 , 2 ) . Value = "Two" ;
368+ ws . Cell ( 8 , 3 ) . Value = "One" ;
369+ ws . Cell ( 8 , 10 ) . Value = "One" ;
370+
371+ ws . Range ( 8 , 3 , 8 , 9 ) . Merge ( ) ;
372+
373+ ws . Cell ( 9 , 1 ) . Value = "One" ;
374+ ws . Cell ( 9 , 2 ) . Value = "One" ;
375+ ws . Cell ( 9 , 9 ) . Value = "Two" ;
376+ ws . Cell ( 9 , 10 ) . Value = "Two" ;
377+
378+ ws . Range ( 9 , 2 , 9 , 8 ) . Merge ( ) ;
379+
380+ ws . Cell ( 10 , 1 ) . Value = "One" ;
381+ ws . Cell ( 10 , 2 ) . Value = "One" ;
382+ ws . Cell ( 10 , 3 ) . Value = "One" ;
383+ ws . Cell ( 10 , 6 ) . Value = "One" ;
384+ ws . Cell ( 10 , 8 ) . Value = "Two" ;
385+ ws . Cell ( 10 , 9 ) . Value = "Two" ;
386+ ws . Cell ( 10 , 10 ) . Value = "Two" ;
387+
388+ ws . Range ( 10 , 3 , 10 , 5 ) . Merge ( ) ;
389+ ws . Range ( 10 , 6 , 10 , 7 ) . Merge ( ) ;
390+
391+ ws . Cell ( 11 , 1 ) . Value = "Two" ;
392+ ws . Cell ( 11 , 2 ) . Value = "Two" ;
393+ ws . Cell ( 11 , 3 ) . Value = "One" ;
394+ ws . Cell ( 11 , 5 ) . Value = "One" ;
395+ ws . Cell ( 11 , 6 ) . Value = "One" ;
396+ ws . Cell ( 11 , 8 ) . Value = "Two" ;
397+ ws . Cell ( 11 , 9 ) . Value = "Two" ;
398+ ws . Cell ( 11 , 10 ) . Value = "Two" ;
399+
400+ ws . Range ( 11 , 3 , 11 , 4 ) . Merge ( ) ;
401+ ws . Range ( 11 , 6 , 11 , 8 ) . Merge ( ) ;
402+
403+ ws . Cell ( 12 , 1 ) . Value = "One" ;
404+ ws . Cell ( 12 , 2 ) . Value = "One" ;
405+ ws . Cell ( 12 , 3 ) . Value = "One" ;
406+ ws . Cell ( 12 , 6 ) . Value = "One" ;
407+ ws . Cell ( 12 , 8 ) . Value = "Two" ;
408+ ws . Cell ( 12 , 9 ) . Value = "Two" ;
409+ ws . Cell ( 12 , 10 ) . Value = "Two" ;
410+
411+ ws . Range ( 12 , 1 , 12 , 2 ) . Merge ( ) ;
412+ ws . Range ( 12 , 3 , 12 , 5 ) . Merge ( ) ;
413+ ws . Range ( 12 , 6 , 12 , 7 ) . Merge ( ) ;
414+ ws . Range ( 12 , 9 , 12 , 10 ) . Merge ( ) ;
415+
236416 var panel = new ExcelDataSourcePanel ( "Stub" , Substitute . For < IXLNamedRange > ( ) , new object ( ) ,
237417 Substitute . For < ITemplateProcessor > ( ) )
238418 {
239- GroupBy = "1,2, 3 , 4,5" ,
419+ GroupBy = "1,2, 3 , 4,5,6,7,8,9,10,11 " ,
240420 Type = PanelType . Horizontal
241421 } ;
242422
@@ -250,6 +430,78 @@ public void TestGroupResultHorizontal()
250430 //wb.SaveAs("test.xlsx");
251431 }
252432
433+ [ Test ]
434+ public void TestGroupResultHorizontal_WithoutGroupingBlankValues ( )
435+ {
436+ var wb = new XLWorkbook ( ) ;
437+ var ws = wb . AddWorksheet ( "Test" ) ;
438+ var range = ws . Range ( 2 , 2 , 7 , 9 ) ;
439+
440+ ws . Cell ( 2 , 2 ) . Value = "One" ;
441+ ws . Cell ( 2 , 3 ) . Value = "One" ;
442+ ws . Cell ( 2 , 4 ) . Value = "Two" ;
443+ ws . Cell ( 2 , 5 ) . Value = "Three" ;
444+ ws . Cell ( 2 , 6 ) . Value = "Three" ;
445+ ws . Cell ( 2 , 7 ) . Value = "Three" ;
446+
447+ ws . Range ( 2 , 5 , 2 , 6 ) . Merge ( ) ;
448+
449+ ws . Cell ( 3 , 2 ) . Value = "Orange" ;
450+ ws . Cell ( 3 , 3 ) . Value = "Apple" ;
451+ ws . Cell ( 3 , 4 ) . Value = "Apple" ;
452+ ws . Cell ( 3 , 5 ) . Value = Blank . Value ;
453+ ws . Cell ( 3 , 6 ) . Value = Blank . Value ;
454+ ws . Cell ( 3 , 8 ) . Value = "Pear" ;
455+ ws . Cell ( 3 , 9 ) . Value = "Pear" ;
456+
457+ ws . Cell ( 4 , 2 ) . Value = true ;
458+ ws . Cell ( 4 , 3 ) . Value = true ;
459+ ws . Cell ( 4 , 4 ) . Value = 1 ;
460+ ws . Cell ( 4 , 7 ) . Value = 0 ;
461+ ws . Cell ( 4 , 8 ) . Value = false ;
462+ ws . Cell ( 4 , 9 ) . Value = false ;
463+
464+ ws . Cell ( 5 , 2 ) . Value = 1 ;
465+ ws . Cell ( 5 , 3 ) . Value = 1 ;
466+ ws . Cell ( 5 , 4 ) . Value = 1 ;
467+ ws . Cell ( 5 , 5 ) . Value = 56 ;
468+ ws . Cell ( 5 , 6 ) . Value = 56.1 ;
469+ ws . Cell ( 5 , 7 ) . Value = 56 ;
470+ ws . Cell ( 5 , 8 ) . Value = 77.7 ;
471+ ws . Cell ( 5 , 9 ) . Value = 77.7m ;
472+
473+ ws . Range ( 5 , 3 , 5 , 4 ) . Merge ( ) ;
474+
475+ ws . Cell ( 6 , 2 ) . Value = new DateTime ( 2018 , 2 , 18 ) ;
476+ ws . Cell ( 6 , 3 ) . Value = new DateTime ( 2018 , 2 , 20 ) ;
477+ ws . Cell ( 6 , 4 ) . Value = new DateTime ( 2018 , 2 , 20 ) ;
478+ ws . Cell ( 6 , 5 ) . Value = new DateTime ( 2018 , 2 , 18 ) ;
479+
480+ ws . Range ( 6 , 6 , 6 , 8 ) . Merge ( ) ;
481+
482+ ws . Cell ( 7 , 5 ) . Value = "Value" ;
483+ ws . Cell ( 7 , 6 ) . Value = "Value" ;
484+
485+ ws . Range ( 7 , 2 , 7 , 3 ) . Merge ( ) ;
486+
487+ var panel = new ExcelDataSourcePanel ( "Stub" , Substitute . For < IXLNamedRange > ( ) , new object ( ) ,
488+ Substitute . For < ITemplateProcessor > ( ) )
489+ {
490+ GroupBy = "1,2, 3 , 4,5,6" ,
491+ GroupBlankValues = false ,
492+ Type = PanelType . Horizontal
493+ } ;
494+
495+ var method = panel . GetType ( ) . GetMethod ( "GroupResult" , BindingFlags . Instance | BindingFlags . NonPublic ) ;
496+ SetResultRange ( panel , range ) ;
497+ method . Invoke ( panel , null ) ;
498+
499+ ExcelAssert . AreWorkbooksContentEquals (
500+ TestHelper . GetExpectedWorkbook ( nameof ( ExcelDataSourcePanelTest ) , nameof ( TestGroupResultHorizontal_WithoutGroupingBlankValues ) ) , wb ) ;
501+
502+ //wb.SaveAs("test.xlsx");
503+ }
504+
253505 [ Test ]
254506 public void TestIfGroupByPropertyIsEmpty ( )
255507 {
0 commit comments