| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | 
							- <?php
 
- namespace PhpOffice\PhpSpreadsheet\Cell;
 
- use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
 
- use PhpOffice\PhpSpreadsheet\Calculation\Functions;
 
- use PhpOffice\PhpSpreadsheet\Exception;
 
- /**
 
-  * Validate a cell value according to its validation rules.
 
-  */
 
- class DataValidator
 
- {
 
-     /**
 
-      * Does this cell contain valid value?
 
-      *
 
-      * @param Cell $cell Cell to check the value
 
-      *
 
-      * @return bool
 
-      */
 
-     public function isValid(Cell $cell)
 
-     {
 
-         if (!$cell->hasDataValidation()) {
 
-             return true;
 
-         }
 
-         $cellValue = $cell->getValue();
 
-         $dataValidation = $cell->getDataValidation();
 
-         if (!$dataValidation->getAllowBlank() && ($cellValue === null || $cellValue === '')) {
 
-             return false;
 
-         }
 
-         // TODO: write check on all cases
 
-         switch ($dataValidation->getType()) {
 
-             case DataValidation::TYPE_LIST:
 
-                 return $this->isValueInList($cell);
 
-         }
 
-         return false;
 
-     }
 
-     /**
 
-      * Does this cell contain valid value, based on list?
 
-      *
 
-      * @param Cell $cell Cell to check the value
 
-      *
 
-      * @return bool
 
-      */
 
-     private function isValueInList(Cell $cell)
 
-     {
 
-         $cellValue = $cell->getValue();
 
-         $dataValidation = $cell->getDataValidation();
 
-         $formula1 = $dataValidation->getFormula1();
 
-         if (!empty($formula1)) {
 
-             // inline values list
 
-             if ($formula1[0] === '"') {
 
-                 return in_array(strtolower($cellValue), explode(',', strtolower(trim($formula1, '"'))), true);
 
-             } elseif (strpos($formula1, ':') > 0) {
 
-                 // values list cells
 
-                 $matchFormula = '=MATCH(' . $cell->getCoordinate() . ', ' . $formula1 . ', 0)';
 
-                 $calculation = Calculation::getInstance($cell->getWorksheet()->getParent());
 
-                 try {
 
-                     $result = $calculation->calculateFormula($matchFormula, $cell->getCoordinate(), $cell);
 
-                     return $result !== Functions::NA();
 
-                 } catch (Exception $ex) {
 
-                     return false;
 
-                 }
 
-             }
 
-         }
 
-         return true;
 
-     }
 
- }
 
 
  |