From 165acb9a12ffc78d6ddd5df4b40c7238ca66aedc Mon Sep 17 00:00:00 2001 From: saifulislamferoz Date: Sat, 28 Jun 2025 16:37:32 +0600 Subject: [PATCH 1/3] fix: data loss for numeric value greater than excel supported max value --- src/PhpSpreadsheet/Cell/DefaultValueBinder.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/PhpSpreadsheet/Cell/DefaultValueBinder.php b/src/PhpSpreadsheet/Cell/DefaultValueBinder.php index 10c5c93c59..589caab87a 100644 --- a/src/PhpSpreadsheet/Cell/DefaultValueBinder.php +++ b/src/PhpSpreadsheet/Cell/DefaultValueBinder.php @@ -12,6 +12,8 @@ class DefaultValueBinder implements IValueBinder { + const EXCEL_MAX_INT = 9007199254740992; // 2^53, max safe integer in JavaScript + /** * Bind value to a cell. * @@ -28,9 +30,9 @@ public function bindValue(Cell $cell, mixed $value): bool } elseif ($value instanceof DateTimeInterface) { $value = $value->format('Y-m-d H:i:s'); } elseif ($value instanceof Stringable) { - $value = (string) $value; + $value = (string)$value; } else { - throw new SpreadsheetException('Unable to bind unstringable ' . gettype($value)); + throw new SpreadsheetException('Unable to bind unstringable '.gettype($value)); } // Set value explicit @@ -62,7 +64,7 @@ public static function dataTypeForValue(mixed $value): string return DataType::TYPE_INLINE; } if ($value instanceof Stringable) { - $value = (string) $value; + $value = (string)$value; } if (!is_string($value)) { $gettype = is_object($value) ? get_class($value) : gettype($value); @@ -93,7 +95,7 @@ public static function dataTypeForValue(mixed $value): string $tValue = ltrim($value, '+-'); if (strlen($tValue) > 1 && $tValue[0] === '0' && $tValue[1] !== '.') { return DataType::TYPE_STRING; - } elseif ((!str_contains($value, '.')) && ($value > PHP_INT_MAX)) { + } elseif ((!str_contains($value, '.')) && ($value > self::EXCEL_MAX_INT)) { return DataType::TYPE_STRING; } elseif (!is_numeric($value)) { return DataType::TYPE_STRING; From 35b40c8cbe94ed8b31bb6f0700dd7d67eefbcf0f Mon Sep 17 00:00:00 2001 From: saifulislamferoz Date: Sat, 28 Jun 2025 16:47:19 +0600 Subject: [PATCH 2/3] fix: phpcs violation for space --- src/PhpSpreadsheet/Cell/DefaultValueBinder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PhpSpreadsheet/Cell/DefaultValueBinder.php b/src/PhpSpreadsheet/Cell/DefaultValueBinder.php index 589caab87a..c5ebfb17b6 100644 --- a/src/PhpSpreadsheet/Cell/DefaultValueBinder.php +++ b/src/PhpSpreadsheet/Cell/DefaultValueBinder.php @@ -30,9 +30,9 @@ public function bindValue(Cell $cell, mixed $value): bool } elseif ($value instanceof DateTimeInterface) { $value = $value->format('Y-m-d H:i:s'); } elseif ($value instanceof Stringable) { - $value = (string)$value; + $value = (string) $value; } else { - throw new SpreadsheetException('Unable to bind unstringable '.gettype($value)); + throw new SpreadsheetException('Unable to bind unstringable ' . gettype($value)); } // Set value explicit From 153bbbcc49ee0ebd715c29b3d301c58128ea7307 Mon Sep 17 00:00:00 2001 From: saifulislamferoz Date: Sat, 28 Jun 2025 16:49:22 +0600 Subject: [PATCH 3/3] fix: phpcs violation for space --- src/PhpSpreadsheet/Cell/DefaultValueBinder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PhpSpreadsheet/Cell/DefaultValueBinder.php b/src/PhpSpreadsheet/Cell/DefaultValueBinder.php index c5ebfb17b6..0868576cae 100644 --- a/src/PhpSpreadsheet/Cell/DefaultValueBinder.php +++ b/src/PhpSpreadsheet/Cell/DefaultValueBinder.php @@ -64,7 +64,7 @@ public static function dataTypeForValue(mixed $value): string return DataType::TYPE_INLINE; } if ($value instanceof Stringable) { - $value = (string)$value; + $value = (string) $value; } if (!is_string($value)) { $gettype = is_object($value) ? get_class($value) : gettype($value);