From 3e5ef284a51f82bd16f9b2bc4e4d06eb816e732e Mon Sep 17 00:00:00 2001 From: Adrien Loison Date: Thu, 16 Apr 2015 12:59:59 -0700 Subject: [PATCH] Fix empty shared string bug Replaced !$sharedString by $sharedString === null to avoid the case when $sharedString = '' --- .../Reader/Helper/XLSX/SharedStringsHelper.php | 2 +- tests/Spout/Reader/XLSXTest.php | 13 +++++++++++++ .../xlsx/sheet_with_empty_shared_string.xlsx | Bin 0 -> 3628 bytes 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 tests/resources/xlsx/sheet_with_empty_shared_string.xlsx diff --git a/src/Spout/Reader/Helper/XLSX/SharedStringsHelper.php b/src/Spout/Reader/Helper/XLSX/SharedStringsHelper.php index 89f0004..6a88d2d 100644 --- a/src/Spout/Reader/Helper/XLSX/SharedStringsHelper.php +++ b/src/Spout/Reader/Helper/XLSX/SharedStringsHelper.php @@ -257,7 +257,7 @@ class SharedStringsHelper $sharedString = $this->unescapeLineFeed($escapedSharedString); } - if (!$sharedString) { + if ($sharedString === null) { throw new SharedStringNotFoundException("Shared string not found for index: $sharedStringIndex"); } diff --git a/tests/Spout/Reader/XLSXTest.php b/tests/Spout/Reader/XLSXTest.php index 823490b..20e89d3 100644 --- a/tests/Spout/Reader/XLSXTest.php +++ b/tests/Spout/Reader/XLSXTest.php @@ -140,6 +140,19 @@ class XLSXTest extends \PHPUnit_Framework_TestCase $this->assertEquals($expectedRows, $allRows); } + /** + * @return void + */ + public function testReadShouldSupportEmptySharedString() + { + $allRows = $this->getAllRowsForFile('sheet_with_empty_shared_string.xlsx'); + + $expectedRows = [ + ['s1--A1', '', 's1--C1'], + ]; + $this->assertEquals($expectedRows, $allRows); + } + /** * @return void */ diff --git a/tests/resources/xlsx/sheet_with_empty_shared_string.xlsx b/tests/resources/xlsx/sheet_with_empty_shared_string.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f44da69ed47f32d1998eefb55408bf047419a66c GIT binary patch literal 3628 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 F{sZ(DG