@@ -763,26 +763,71 @@ private static function writeColorScaleElements(XMLWriter $objWriter, ?Condition
763
763
$ useMin = $ minCfvo !== null || $ minArgb !== null ;
764
764
if ($ useMin ) {
765
765
$ 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 );
768
783
$ objWriter ->endElement ();
769
784
}
770
785
$ midCfvo = $ colorScale ->getMidpointConditionalFormatValueObject ();
771
786
$ midArgb = $ colorScale ->getMidpointColor ()?->getARGB();
772
787
$ useMid = $ midCfvo !== null || $ midArgb !== null ;
773
788
if ($ useMid ) {
774
789
$ 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 );
777
807
$ objWriter ->endElement ();
778
808
}
779
809
$ maxCfvo = $ colorScale ->getMaximumConditionalFormatValueObject ();
780
810
$ maxArgb = $ colorScale ->getMaximumColor ()?->getARGB();
781
811
$ useMax = $ maxCfvo !== null || $ maxArgb !== null ;
782
812
if ($ useMax ) {
783
813
$ 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 );
786
831
$ objWriter ->endElement ();
787
832
}
788
833
if ($ useMin ) {
0 commit comments