@@ -763,26 +763,71 @@ private static function writeColorScaleElements(XMLWriter $objWriter, ?Condition
763763 $ useMin = $ minCfvo !== null || $ minArgb !== null ;
764764 if ($ useMin ) {
765765 $ objWriter ->startElement ('cfvo ' );
766- $ objWriter ->writeAttribute ('type ' , $ minCfvo ?->getType() ?? 'min ' );
767- self ::writeAttributeIf ($ objWriter , $ minCfvo ?->getValue() !== null , 'val ' , (string ) $ minCfvo ?->getValue());
766+ $ type = 'min ' ;
767+ $ value = null ;
768+ if ($ minCfvo !== null ) {
769+ $ typex = $ minCfvo ->getType ();
770+ if ($ typex === 'formula ' ) {
771+ $ value = $ minCfvo ->getCellFormula ();
772+ if ($ value !== null ) {
773+ $ type = $ typex ;
774+ }
775+ } else {
776+ $ type = $ typex ;
777+ $ defaults = ['number ' => '0 ' , 'percent ' => '0 ' , 'percentile ' => '10 ' ];
778+ $ value = $ minCfvo ->getValue () ?? $ defaults [$ type ] ?? null ;
779+ }
780+ }
781+ $ objWriter ->writeAttribute ('type ' , $ type );
782+ self ::writeAttributeIf ($ objWriter , $ value !== null , 'val ' , (string ) $ value );
768783 $ objWriter ->endElement ();
769784 }
770785 $ midCfvo = $ colorScale ->getMidpointConditionalFormatValueObject ();
771786 $ midArgb = $ colorScale ->getMidpointColor ()?->getARGB();
772787 $ useMid = $ midCfvo !== null || $ midArgb !== null ;
773788 if ($ useMid ) {
774789 $ objWriter ->startElement ('cfvo ' );
775- $ objWriter ->writeAttribute ('type ' , $ midCfvo ?->getType() ?? 'percentile ' );
776- $ objWriter ->writeAttribute ('val ' , (string ) (($ midCfvo ?->getValue()) ?? '50 ' ));
790+ $ type = 'percentile ' ;
791+ $ value = '50 ' ;
792+ if ($ midCfvo !== null ) {
793+ $ type = $ midCfvo ->getType ();
794+ if ($ type === 'formula ' ) {
795+ $ value = $ midCfvo ->getCellFormula ();
796+ if ($ value === null ) {
797+ $ type = 'percentile ' ;
798+ $ value = '50 ' ;
799+ }
800+ } else {
801+ $ defaults = ['number ' => '0 ' , 'percent ' => '50 ' , 'percentile ' => '50 ' ];
802+ $ value = $ midCfvo ->getValue () ?? $ defaults [$ type ] ?? null ;
803+ }
804+ }
805+ $ objWriter ->writeAttribute ('type ' , $ type );
806+ self ::writeAttributeIf ($ objWriter , $ value !== null , 'val ' , (string ) $ value );
777807 $ objWriter ->endElement ();
778808 }
779809 $ maxCfvo = $ colorScale ->getMaximumConditionalFormatValueObject ();
780810 $ maxArgb = $ colorScale ->getMaximumColor ()?->getARGB();
781811 $ useMax = $ maxCfvo !== null || $ maxArgb !== null ;
782812 if ($ useMax ) {
783813 $ objWriter ->startElement ('cfvo ' );
784- $ objWriter ->writeAttribute ('type ' , $ maxCfvo ?->getType() ?? 'max ' );
785- self ::writeAttributeIf ($ objWriter , $ maxCfvo ?->getValue() !== null , 'val ' , (string ) $ maxCfvo ?->getValue());
814+ $ type = 'max ' ;
815+ $ value = null ;
816+ if ($ maxCfvo !== null ) {
817+ $ typex = $ maxCfvo ->getType ();
818+ if ($ typex === 'formula ' ) {
819+ $ value = $ maxCfvo ->getCellFormula ();
820+ if ($ value !== null ) {
821+ $ type = $ typex ;
822+ }
823+ } else {
824+ $ type = $ typex ;
825+ $ defaults = ['number ' => '0 ' , 'percent ' => '100 ' , 'percentile ' => '90 ' ];
826+ $ value = $ maxCfvo ->getValue () ?? $ defaults [$ type ] ?? null ;
827+ }
828+ }
829+ $ objWriter ->writeAttribute ('type ' , $ type );
830+ self ::writeAttributeIf ($ objWriter , $ value !== null , 'val ' , (string ) $ value );
786831 $ objWriter ->endElement ();
787832 }
788833 if ($ useMin ) {
0 commit comments