<?php
namespace PhpOffice\PhpSpreadsheet\Cell;
> use DateTimeInterface;
use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
> use PhpOffice\PhpSpreadsheet\RichText\RichText;
class StringValueBinder implements IValueBinder
{
/**
> * @var bool
* Bind value to a cell.
> */
*
> protected $convertNull = true;
* @param Cell $cell Cell to bind value to
>
* @param mixed $value Value to bind in cell
> /**
*
> * @var bool
* @throws \PhpOffice\PhpSpreadsheet\Exception
> */
*
> protected $convertBoolean = true;
* @return bool
>
*/
> /**
public function bindValue(Cell $cell, $value)
> * @var bool
{
> */
// sanitize UTF-8 strings
> protected $convertNumeric = true;
if (is_string($value)) {
>
$value = StringHelper::sanitizeUTF8($value);
> /**
}
> * @var bool
> */
$cell->setValueExplicit((string) $value, DataType::TYPE_STRING);
> protected $convertFormula = true;
>
// Done!
> public function setNullConversion(bool $suppressConversion = false): self
return true;
> {
}
> $this->convertNull = $suppressConversion;
}
>
> return $this;
> }
>
> public function setBooleanConversion(bool $suppressConversion = false): self
> {
> $this->convertBoolean = $suppressConversion;
>
> return $this;
> }
>
> public function getBooleanConversion(): bool
> {
> return $this->convertBoolean;
> }
>
> public function setNumericConversion(bool $suppressConversion = false): self
> {
> $this->convertNumeric = $suppressConversion;
>
> return $this;
> }
>
> public function setFormulaConversion(bool $suppressConversion = false): self
> {
> $this->convertFormula = $suppressConversion;
>
> return $this;
> }
>
> public function setConversionForAllValueTypes(bool $suppressConversion = false): self
> {
> $this->convertNull = $suppressConversion;
> $this->convertBoolean = $suppressConversion;
> $this->convertNumeric = $suppressConversion;
> $this->convertFormula = $suppressConversion;
>
> return $this;
> }
>
> /**
< *
< * @throws \PhpOffice\PhpSpreadsheet\Exception
< *
< * @return bool
> if (is_object($value)) {
> return $this->bindObjectValue($cell, $value);
> }
>
> if ($value === null && $this->convertNull === false) {
> $cell->setValueExplicit($value, DataType::TYPE_NULL);
> } elseif (is_bool($value) && $this->convertBoolean === false) {
> $cell->setValueExplicit($value, DataType::TYPE_BOOL);
> } elseif ((is_int($value) || is_float($value)) && $this->convertNumeric === false) {
> $cell->setValueExplicit($value, DataType::TYPE_NUMERIC);
> } elseif (is_string($value) && strlen($value) > 1 && $value[0] === '=' && $this->convertFormula === false) {
> $cell->setValueExplicit($value, DataType::TYPE_FORMULA);
> } else {
> if (is_string($value) && strlen($value) > 1 && $value[0] === '=') {
> $cell->getStyle()->setQuotePrefix(true);
> }
> $cell->setValueExplicit((string) $value, DataType::TYPE_STRING);
> }
>
> return true;
> }
>
> protected function bindObjectValue(Cell $cell, object $value): bool
> {
> // Handle any objects that might be injected
> if ($value instanceof DateTimeInterface) {
> $value = $value->format('Y-m-d H:i:s');
> } elseif ($value instanceof RichText) {
> $cell->setValueExplicit($value, DataType::TYPE_INLINE);
>
> return true;
> }
>
< // Done!