/**
  * DataType for value
  *
  * @param   mixed  $pValue
  * @return  string
  */
 public static function dataTypeForValue($pValue = null)
 {
     // Match the value against a few data types
     if ($pValue === null) {
         return DataType::TYPE_NULL;
     } elseif ($pValue === '') {
         return DataType::TYPE_STRING;
     } elseif ($pValue instanceof \PHPExcel\RichText) {
         return DataType::TYPE_INLINE;
     } elseif ($pValue[0] === '=' && strlen($pValue) > 1) {
         return DataType::TYPE_FORMULA;
     } elseif (is_bool($pValue)) {
         return DataType::TYPE_BOOL;
     } elseif (is_float($pValue) || is_int($pValue)) {
         return DataType::TYPE_NUMERIC;
     } elseif (preg_match('/^[\\+\\-]?([0-9]+\\.?[0-9]*|[0-9]*\\.?[0-9]+)([Ee][\\-\\+]?[0-2]?\\d{1,3})?$/', $pValue)) {
         $tValue = ltrim($pValue, '+-');
         if (is_string($pValue) && $tValue[0] === '0' && strlen($tValue) > 1 && $tValue[1] !== '.') {
             return DataType::TYPE_STRING;
         } elseif (strpos($pValue, '.') === false && $pValue > PHP_INT_MAX) {
             return DataType::TYPE_STRING;
         }
         return DataType::TYPE_NUMERIC;
     } elseif (is_string($pValue) && array_key_exists($pValue, DataType::getErrorCodes())) {
         return DataType::TYPE_ERROR;
     }
     return DataType::TYPE_STRING;
 }