| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <?php
- namespace PhpOffice\PhpSpreadsheet\Cell;
- use DateTimeInterface;
- use PhpOffice\PhpSpreadsheet\RichText\RichText;
- use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
- class StringValueBinder implements IValueBinder
- {
- /**
- * @var bool
- */
- protected $convertNull = true;
- /**
- * @var bool
- */
- protected $convertBoolean = true;
- /**
- * @var bool
- */
- protected $convertNumeric = true;
- /**
- * @var bool
- */
- protected $convertFormula = true;
- public function setNullConversion(bool $suppressConversion = false): self
- {
- $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;
- }
- /**
- * Bind value to a cell.
- *
- * @param Cell $cell Cell to bind value to
- * @param mixed $value Value to bind in cell
- */
- public function bindValue(Cell $cell, $value)
- {
- if (is_object($value)) {
- return $this->bindObjectValue($cell, $value);
- }
- // sanitize UTF-8 strings
- if (is_string($value)) {
- $value = StringHelper::sanitizeUTF8($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;
- }
- $cell->setValueExplicit((string) $value, DataType::TYPE_STRING);
- return true;
- }
- }
|