From 1a06aa624dbc0013ce27c4fcf25d4dc08742592d Mon Sep 17 00:00:00 2001 From: Andrii Dembitskyi Date: Tue, 22 Jun 2021 16:15:32 +0300 Subject: [PATCH 1/5] Handle invalid (object) value in cell value while generating exception message - add classname to message --- src/Spout/Writer/ODS/Manager/WorksheetManager.php | 4 +++- src/Spout/Writer/XLSX/Manager/WorksheetManager.php | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Spout/Writer/ODS/Manager/WorksheetManager.php b/src/Spout/Writer/ODS/Manager/WorksheetManager.php index 7d7cb0eb..bd87dc10 100644 --- a/src/Spout/Writer/ODS/Manager/WorksheetManager.php +++ b/src/Spout/Writer/ODS/Manager/WorksheetManager.php @@ -243,7 +243,9 @@ private function getCellXML(Cell $cell, $styleIndex, $numTimesValueRepeated) } elseif ($cell->isEmpty()) { $data .= '/>'; } else { - throw new InvalidArgumentException('Trying to add a value with an unsupported type: ' . \gettype($cell->getValue())); + $value = $cell->getValue(); + + throw new InvalidArgumentException('Trying to add a value with an unsupported type: ' . (\is_object($value) ? \get_class($value) : \gettype($value))); } return $data; diff --git a/src/Spout/Writer/XLSX/Manager/WorksheetManager.php b/src/Spout/Writer/XLSX/Manager/WorksheetManager.php index 61b93a17..b67f7ac6 100644 --- a/src/Spout/Writer/XLSX/Manager/WorksheetManager.php +++ b/src/Spout/Writer/XLSX/Manager/WorksheetManager.php @@ -253,7 +253,9 @@ private function getCellXML($rowIndexOneBased, $columnIndexZeroBased, Cell $cell $cellXML = ''; } } else { - throw new InvalidArgumentException('Trying to add a value with an unsupported type: ' . \gettype($cell->getValue())); + $value = $cell->getValue(); + + throw new InvalidArgumentException('Trying to add a value with an unsupported type: ' . (\is_object($value) ? \get_class($value) : \gettype($value))); } return $cellXML; From 8b3b832359c64ee3ad6099df7e540d5029d63da9 Mon Sep 17 00:00:00 2001 From: Andrii Dembitskyi Date: Tue, 22 Jun 2021 16:15:40 +0300 Subject: [PATCH 2/5] Use original cell value event if cell contain error to generate more helpful exception message (in case of objects, for example) --- src/Spout/Writer/ODS/Manager/WorksheetManager.php | 2 +- src/Spout/Writer/XLSX/Manager/WorksheetManager.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Spout/Writer/ODS/Manager/WorksheetManager.php b/src/Spout/Writer/ODS/Manager/WorksheetManager.php index bd87dc10..cf47f5a3 100644 --- a/src/Spout/Writer/ODS/Manager/WorksheetManager.php +++ b/src/Spout/Writer/ODS/Manager/WorksheetManager.php @@ -243,7 +243,7 @@ private function getCellXML(Cell $cell, $styleIndex, $numTimesValueRepeated) } elseif ($cell->isEmpty()) { $data .= '/>'; } else { - $value = $cell->getValue(); + $value = $cell->getValueEvenIfError(); throw new InvalidArgumentException('Trying to add a value with an unsupported type: ' . (\is_object($value) ? \get_class($value) : \gettype($value))); } diff --git a/src/Spout/Writer/XLSX/Manager/WorksheetManager.php b/src/Spout/Writer/XLSX/Manager/WorksheetManager.php index b67f7ac6..2f59de95 100644 --- a/src/Spout/Writer/XLSX/Manager/WorksheetManager.php +++ b/src/Spout/Writer/XLSX/Manager/WorksheetManager.php @@ -253,7 +253,7 @@ private function getCellXML($rowIndexOneBased, $columnIndexZeroBased, Cell $cell $cellXML = ''; } } else { - $value = $cell->getValue(); + $value = $cell->getValueEvenIfError(); throw new InvalidArgumentException('Trying to add a value with an unsupported type: ' . (\is_object($value) ? \get_class($value) : \gettype($value))); } From aef099faf324f2dbee3f914a38a453fe52f2100b Mon Sep 17 00:00:00 2001 From: Andrii Dembitskyi Date: Wed, 23 Jun 2021 09:29:42 -0400 Subject: [PATCH 3/5] Preserve classname and PHP type together in error message Co-authored-by: Adrien Loison --- src/Spout/Writer/XLSX/Manager/WorksheetManager.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Spout/Writer/XLSX/Manager/WorksheetManager.php b/src/Spout/Writer/XLSX/Manager/WorksheetManager.php index 2f59de95..925e5747 100644 --- a/src/Spout/Writer/XLSX/Manager/WorksheetManager.php +++ b/src/Spout/Writer/XLSX/Manager/WorksheetManager.php @@ -255,7 +255,12 @@ private function getCellXML($rowIndexOneBased, $columnIndexZeroBased, Cell $cell } else { $value = $cell->getValueEvenIfError(); - throw new InvalidArgumentException('Trying to add a value with an unsupported type: ' . (\is_object($value) ? \get_class($value) : \gettype($value))); +$errorMessage = 'Trying to add a value with an unsupported type: ' . \gettype($value); +if (is_object($value)) { + $errorMessage .= ' (' . get_class($value) . ' given)'; +} + +throw new InvalidArgumentException($errorMessage); } return $cellXML; From c7f2612685362bc9582ce032b94a8ba6c8cfcd3e Mon Sep 17 00:00:00 2001 From: Andrii Dembitskyi Date: Wed, 23 Jun 2021 16:32:27 +0300 Subject: [PATCH 4/5] Preserve classname and PHP type together in error message --- src/Spout/Writer/ODS/Manager/WorksheetManager.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Spout/Writer/ODS/Manager/WorksheetManager.php b/src/Spout/Writer/ODS/Manager/WorksheetManager.php index cf47f5a3..3b8da638 100644 --- a/src/Spout/Writer/ODS/Manager/WorksheetManager.php +++ b/src/Spout/Writer/ODS/Manager/WorksheetManager.php @@ -245,7 +245,12 @@ private function getCellXML(Cell $cell, $styleIndex, $numTimesValueRepeated) } else { $value = $cell->getValueEvenIfError(); - throw new InvalidArgumentException('Trying to add a value with an unsupported type: ' . (\is_object($value) ? \get_class($value) : \gettype($value))); + $errorMessage = 'Trying to add a value with an unsupported type: ' . \gettype($value); + if (\is_object($value)) { + $errorMessage .= ' (' . \get_class($value) . ' given)'; + } + + throw new InvalidArgumentException($errorMessage); } return $data; From ca805bc50fa2e8139a18c9d4b3dc069f9ae46d2a Mon Sep 17 00:00:00 2001 From: Andrii Dembitskyi Date: Wed, 23 Jun 2021 16:33:01 +0300 Subject: [PATCH 5/5] Fix CS --- src/Spout/Writer/XLSX/Manager/WorksheetManager.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Spout/Writer/XLSX/Manager/WorksheetManager.php b/src/Spout/Writer/XLSX/Manager/WorksheetManager.php index 925e5747..b6465e67 100644 --- a/src/Spout/Writer/XLSX/Manager/WorksheetManager.php +++ b/src/Spout/Writer/XLSX/Manager/WorksheetManager.php @@ -255,12 +255,12 @@ private function getCellXML($rowIndexOneBased, $columnIndexZeroBased, Cell $cell } else { $value = $cell->getValueEvenIfError(); -$errorMessage = 'Trying to add a value with an unsupported type: ' . \gettype($value); -if (is_object($value)) { - $errorMessage .= ' (' . get_class($value) . ' given)'; -} + $errorMessage = 'Trying to add a value with an unsupported type: ' . \gettype($value); + if (\is_object($value)) { + $errorMessage .= ' (' . \get_class($value) . ' given)'; + } -throw new InvalidArgumentException($errorMessage); + throw new InvalidArgumentException($errorMessage); } return $cellXML;