From 0449123e761057d11b9d2060652ac9f7ccfcaee1 Mon Sep 17 00:00:00 2001 From: madflow Date: Wed, 8 Jun 2016 12:07:28 +0200 Subject: [PATCH] Fix #245 --- .../Reader/ODS/Helper/CellValueFormatter.php | 3 ++- tests/Spout/Reader/ODS/ReaderTest.php | 14 ++++++++++++++ .../ods/sheet_with_inline_font_formatting.ods | Bin 0 -> 8552 bytes 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 tests/resources/ods/sheet_with_inline_font_formatting.ods diff --git a/src/Spout/Reader/ODS/Helper/CellValueFormatter.php b/src/Spout/Reader/ODS/Helper/CellValueFormatter.php index 38c1c85..99d8563 100644 --- a/src/Spout/Reader/ODS/Helper/CellValueFormatter.php +++ b/src/Spout/Reader/ODS/Helper/CellValueFormatter.php @@ -24,6 +24,7 @@ class CellValueFormatter const XML_NODE_P = 'p'; const XML_NODE_S = 'text:s'; const XML_NODE_A = 'text:a'; + const XML_NODE_SPAN = 'text:span'; /** Definition of XML attribute used to parse data */ const XML_ATTRIBUTE_TYPE = 'office:value-type'; @@ -104,7 +105,7 @@ class CellValueFormatter $spaceAttribute = $childNode->getAttribute(self::XML_ATTRIBUTE_C); $numSpaces = (!empty($spaceAttribute)) ? intval($spaceAttribute) : 1; $currentPValue .= str_repeat(' ', $numSpaces); - } else if ($childNode->nodeName === self::XML_NODE_A) { + } else if ($childNode->nodeName === self::XML_NODE_A || $childNode->nodeName === self::XML_NODE_SPAN) { $currentPValue .= $childNode->nodeValue; } } diff --git a/tests/Spout/Reader/ODS/ReaderTest.php b/tests/Spout/Reader/ODS/ReaderTest.php index 759d842..dee4164 100644 --- a/tests/Spout/Reader/ODS/ReaderTest.php +++ b/tests/Spout/Reader/ODS/ReaderTest.php @@ -468,6 +468,20 @@ class ReaderTest extends \PHPUnit_Framework_TestCase $this->assertEquals($expectedRows, $allRows, 'Text in hyperlinks should be read'); } + /** + * @return void + */ + public function testReaderShouldReadInlineFontFormattingAsText() + { + $allRows = $this->getAllRowsForFile('sheet_with_inline_font_formatting.ods'); + + $expectedRows = [ + ['I am a yellow bird'] + ]; + + $this->assertEquals($expectedRows, $allRows, 'Text formatted inline should be read'); + } + /** * @param string $fileName * @param bool|void $shouldFormatDates diff --git a/tests/resources/ods/sheet_with_inline_font_formatting.ods b/tests/resources/ods/sheet_with_inline_font_formatting.ods new file mode 100644 index 0000000000000000000000000000000000000000..60d4eee4347db40a654eae0ce16bc59163173dfa GIT binary patch literal 8552 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 Hk6H6SyF#aN literal 0 HcmV?d00001