Merge 805cfd7afc033a218c2b44cca724fe77ae02f571 into 1c69dee9c98d5f50e17dc5f97ee97d8873d0f45d

This commit is contained in:
Adrien Loison 2017-11-11 11:06:25 +00:00 committed by GitHub
commit 5ad076f061
6 changed files with 42 additions and 3 deletions

View File

@ -160,4 +160,12 @@ class XMLReader extends \XMLReader
return ($this->nodeType === $nodeType && $currentNodeName === $nodeName); return ($this->nodeType === $nodeType && $currentNodeName === $nodeName);
} }
/**
* @return string The name of the current node, un-prefixed
*/
public function getCurrentNodeName()
{
return $this->localName;
}
} }

View File

@ -114,7 +114,7 @@ class SharedStringsManager
$xmlReader->readUntilNodeFound(self::XML_NODE_SI); $xmlReader->readUntilNodeFound(self::XML_NODE_SI);
while ($xmlReader->name === self::XML_NODE_SI) { while ($xmlReader->getCurrentNodeName() === self::XML_NODE_SI) {
$this->processSharedStringsItem($xmlReader, $sharedStringIndex); $this->processSharedStringsItem($xmlReader, $sharedStringIndex);
$sharedStringIndex++; $sharedStringIndex++;
@ -142,7 +142,7 @@ class SharedStringsManager
$xmlReader->next(self::XML_NODE_SST); $xmlReader->next(self::XML_NODE_SST);
// Iterate over the "sst" elements to get the actual "sst ELEMENT" (skips any DOCTYPE) // Iterate over the "sst" elements to get the actual "sst ELEMENT" (skips any DOCTYPE)
while ($xmlReader->name === self::XML_NODE_SST && $xmlReader->nodeType !== XMLReader::ELEMENT) { while ($xmlReader->getCurrentNodeName() === self::XML_NODE_SST && $xmlReader->nodeType !== XMLReader::ELEMENT) {
$xmlReader->read(); $xmlReader->read();
} }

View File

@ -340,7 +340,7 @@ class RowIterator implements IteratorInterface
*/ */
protected function isEmptyRow($rowData) protected function isEmptyRow($rowData)
{ {
return (count($rowData) === 1 && $rowData[0] === ''); return (count($rowData) === 1 && reset($rowData) === '');
} }
/** /**

View File

@ -111,6 +111,22 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($expectedRows, $allRows); $this->assertEquals($expectedRows, $allRows);
} }
/**
* @return void
*/
public function testReadShouldSupportPrefixedSharedStringsXML()
{
// The sharedStrings.xml file of this spreadsheet is prefixed.
// For instance, they use "<x:sst>" instead of "<sst>", etc.
$allRows = $this->getAllRowsForFile('sheet_with_prefixed_shared_strings_xml.xlsx');
$expectedRows = [
['s1--A1', 's1--B1', 's1--C1', 's1--D1', 's1--E1'],
['s1--A2', 's1--B2', 's1--C2', 's1--D2', 's1--E2'],
];
$this->assertEquals($expectedRows, $allRows);
}
/** /**
* @return void * @return void
*/ */
@ -168,6 +184,21 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($expectedRows, $allRows); $this->assertEquals($expectedRows, $allRows);
} }
/**
* @return void
*/
public function testReadShouldSupportFilesWithRowsNotStartingAtColumnA()
{
// file where the row starts at column C:
// <row r="1"><c r="C1" s="0" t="s"><v>0</v></c>...
$allRows = $this->getAllRowsForFile('sheet_with_row_not_starting_at_column_a.xlsx');
$expectedRows = [
['', '', 's1--C1', 's1--D1', 's1--E1'],
];
$this->assertEquals($expectedRows, $allRows);
}
/** /**
* @return void * @return void
*/ */