@@ -165,29 +165,7 @@ internal void WriteSharedItems(XmlElement fieldNode, XmlNamespaceManager nsm)
165165 {
166166 shNode . SetAttribute ( "containsMixedTypes" , "1" ) ;
167167 SetFlags ( shNode , flags ) ;
168-
169- //Grouped fields need to have the max and min values set.
170- if ( Grouping != null )
171- {
172- if ( flags == DataTypeFlags . DateTime )
173- {
174- var min = ( DateTime ) SharedItems . Min ( ) ;
175- shNode . SetAttribute ( "minDate" , GetDateString ( min ) ) ;
176- var max = ( DateTime ) SharedItems . Max ( ) ;
177- shNode . SetAttribute ( "maxDate" , GetDateString ( max ) ) ;
178- }
179- else if ( ( int ) ( flags & DataTypeFlags . Number | flags & DataTypeFlags . Int | DataTypeFlags . Float ) != 0 )
180- {
181- var min = ConvertUtil . GetValueDouble ( SharedItems . Min ( ) , true , true ) ;
182- var max = ConvertUtil . GetValueDouble ( SharedItems . Max ( ) , true , true ) ;
183- if ( ! ( double . IsNaN ( min ) || double . IsNaN ( max ) ) )
184- {
185- shNode . SetAttribute ( "minValue" , min . ToString ( CultureInfo . InvariantCulture ) ) ;
186- shNode . SetAttribute ( "maxValue" , max . ToString ( CultureInfo . InvariantCulture ) ) ;
187- }
188- }
189- }
190- }
168+ }
191169 else
192170 {
193171 if ( ( flags & DataTypeFlags . String ) != DataTypeFlags . String &&
@@ -200,6 +178,32 @@ internal void WriteSharedItems(XmlElement fieldNode, XmlNamespaceManager nsm)
200178 }
201179 SetFlags ( shNode , flags ) ;
202180 }
181+
182+ //Grouped fields need to have the max and min values set.
183+ if ( Grouping != null )
184+ {
185+ if ( ( flags == DataTypeFlags . DateTime || flags == ( DataTypeFlags . DateTime | DataTypeFlags . Empty ) ) && Grouping is ExcelPivotTableFieldDateGroup )
186+ {
187+ var min = ( DateTime ) SharedItems . Where ( x => x != null && ! x . Equals ( ExcelPivotTable . PivotNullValue ) ) . Min ( ) ;
188+ shNode . SetAttribute ( "minDate" , GetDateString ( min ) ) ;
189+ var max = ( DateTime ) SharedItems . Where ( x => x != null && ! x . Equals ( ExcelPivotTable . PivotNullValue ) ) . Max ( ) ;
190+ shNode . SetAttribute ( "maxDate" , GetDateString ( max ) ) ;
191+ }
192+ else if ( Grouping is ExcelPivotTableFieldNumericGroup )
193+ {
194+ var validFlags = ( DataTypeFlags . Number | DataTypeFlags . Int | DataTypeFlags . Float | DataTypeFlags . Empty ) ;
195+ if ( ( flags & validFlags ) != 0 && ( flags & ~ validFlags ) == 0 && flags != DataTypeFlags . Empty ) // Check that source data is numeric
196+ {
197+ var min = ConvertUtil . GetValueDouble ( SharedItems . Where ( x => x != null && ! x . Equals ( ExcelPivotTable . PivotNullValue ) ) . Min ( ) , true , true ) ;
198+ var max = ConvertUtil . GetValueDouble ( SharedItems . Where ( x => x != null && ! x . Equals ( ExcelPivotTable . PivotNullValue ) ) . Max ( ) , true , true ) ;
199+ if ( ! ( double . IsNaN ( min ) || double . IsNaN ( max ) ) )
200+ {
201+ shNode . SetAttribute ( "minValue" , min . ToString ( CultureInfo . InvariantCulture ) ) ;
202+ shNode . SetAttribute ( "maxValue" , max . ToString ( CultureInfo . InvariantCulture ) ) ;
203+ }
204+ }
205+ }
206+ }
203207 }
204208 internal bool IsRowColumnOrPage
205209 {
@@ -334,7 +338,7 @@ private void SetFlags(XmlElement shNode, DataTypeFlags flags)
334338 {
335339
336340 shNode . SetAttribute ( "containsDate" , "1" ) ;
337- if ( flags == DataTypeFlags . DateTime )
341+ if ( flags == DataTypeFlags . DateTime || flags == ( DataTypeFlags . DateTime | DataTypeFlags . Empty ) )
338342 {
339343 shNode . SetAttribute ( "containsNonDate" , "0" ) ;
340344 }
0 commit comments