code: public function setValueExplicit($pValue, $pDataType)
      {
          // set the value according to data type
          switch ($pDataType) {
              case DataType::TYPE_NULL:
                  $this->value = $pValue;
  
                  break;
              case DataType::TYPE_STRING2:
                  $pDataType = DataType::TYPE_STRING;
                  // no break
              case DataType::TYPE_STRING:
                  // Synonym for string
              case DataType::TYPE_INLINE:
                  // Rich text
                  $this->value = DataType::checkString($pValue);
  
                  break;
              case DataType::TYPE_NUMERIC:
                  $this->value = (float) $pValue;
  
                  break;
              case DataType::TYPE_FORMULA:
                  $this->value = (string) $pValue;
  
                  break;
              case DataType::TYPE_BOOL:
                  $this->value = (bool) $pValue;
  
                  break;
              case DataType::TYPE_ERROR:
                  $this->value = DataType::checkErrorCode($pValue);
  
                  break;
              default:
                  throw new Exception('Invalid datatype: ' . $pDataType);
  
                  break;
          }
  
          // set the datatype
          $this->dataType = $pDataType;
  
          return $this->updateInCollection();
      }
docs: Set the value for a cell, with the explicit data type passed to the method (bypassing any use of the value binder).
  
  @param mixed $pValue Value
  @param string $pDataType Explicit data type, see DataType::TYPE_*
  
  @throws Exception
  
  @return Cell