@@ -296,6 +296,7 @@ class Worksheet
296296
297297 /**
298298 * Data validation objects. Indexed by cell coordinate, e.g. 'A1'.
299+ * Index can include ranges, and multiple cells/ranges.
299300 */
300301 private array $ dataValidationCollection = [];
301302
@@ -3261,23 +3262,30 @@ public function getHyperlinkCollection(): array
32613262 */
32623263 public function getDataValidation (string $ cellCoordinate ): DataValidation
32633264 {
3264- // return data validation if we already have one
32653265 if (isset ($ this ->dataValidationCollection [$ cellCoordinate ])) {
32663266 return $ this ->dataValidationCollection [$ cellCoordinate ];
32673267 }
3268- foreach ($ this ->dataValidationCollection as $ dataValidation ) {
3269- $ sqref = $ dataValidation ->getSqref () ?? '' ;
3270- if (str_contains ($ sqref , ': ' )) {
3271- if (Coordinate::coordinateIsInsideRange ($ sqref , $ cellCoordinate )) {
3268+
3269+ foreach ($ this ->dataValidationCollection as $ key => $ dataValidation ) {
3270+ $ keyParts = explode (' ' , $ key );
3271+ foreach ($ keyParts as $ keyPart ) {
3272+ if ($ keyPart === $ cellCoordinate ) {
32723273 return $ dataValidation ;
32733274 }
3275+ if (str_contains ($ keyPart , ': ' )) {
3276+ if (Coordinate::coordinateIsInsideRange ($ keyPart , $ cellCoordinate )) {
3277+ return $ dataValidation ;
3278+ }
3279+ }
32743280 }
32753281 }
32763282
32773283 // else create data validation
3278- $ this ->dataValidationCollection [$ cellCoordinate ] = new DataValidation ();
3284+ $ dataValidation = new DataValidation ();
3285+ $ dataValidation ->setSqref ($ cellCoordinate );
3286+ $ this ->dataValidationCollection [$ cellCoordinate ] = $ dataValidation ;
32793287
3280- return $ this -> dataValidationCollection [ $ cellCoordinate ] ;
3288+ return $ dataValidation ;
32813289 }
32823290
32833291 /**
@@ -3308,12 +3316,17 @@ public function dataValidationExists(string $coordinate): bool
33083316 if (isset ($ this ->dataValidationCollection [$ coordinate ])) {
33093317 return true ;
33103318 }
3311- foreach ($ this ->dataValidationCollection as $ dataValidation ) {
3312- $ sqref = $ dataValidation -> getSqref () ?? '' ;
3313- if ( str_contains ( $ sqref , ' : ' ) ) {
3314- if (Coordinate:: coordinateIsInsideRange ( $ sqref , $ coordinate) ) {
3319+ foreach ($ this ->dataValidationCollection as $ key => $ dataValidation ) {
3320+ $ keyParts = explode ( ' ' , $ key ) ;
3321+ foreach ( $ keyParts as $ keyPart ) {
3322+ if ($ keyPart === $ coordinate ) {
33153323 return true ;
33163324 }
3325+ if (str_contains ($ keyPart , ': ' )) {
3326+ if (Coordinate::coordinateIsInsideRange ($ keyPart , $ coordinate )) {
3327+ return true ;
3328+ }
3329+ }
33173330 }
33183331 }
33193332
@@ -3327,7 +3340,17 @@ public function dataValidationExists(string $coordinate): bool
33273340 */
33283341 public function getDataValidationCollection (): array
33293342 {
3330- return $ this ->dataValidationCollection ;
3343+ $ collectionCells = [];
3344+ $ collectionRanges = [];
3345+ foreach ($ this ->dataValidationCollection as $ key => $ dataValidation ) {
3346+ if (preg_match ('/[: ]/ ' , $ key ) === 1 ) {
3347+ $ collectionRanges [$ key ] = $ dataValidation ;
3348+ } else {
3349+ $ collectionCells [$ key ] = $ dataValidation ;
3350+ }
3351+ }
3352+
3353+ return array_merge ($ collectionCells , $ collectionRanges );
33313354 }
33323355
33333356 /**
0 commit comments