diff --git a/CHANGELOG.md b/CHANGELOG.md index e409ce8c53..d2108afede 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Added - Support for chart fill color - @CrazyBite [#158](https://github.com/PHPOffice/PhpSpreadsheet/pull/158) +- Support for read Hyperlink for xml - [@GreatHumorist](https://github.com/GreatHumorist) [#223](https://github.com/PHPOffice/PhpSpreadsheet/pull/223) ### Changed diff --git a/docs/references/features-cross-reference.md b/docs/references/features-cross-reference.md index 7ab9d068c6..a02558b3c9 100644 --- a/docs/references/features-cross-reference.md +++ b/docs/references/features-cross-reference.md @@ -1167,7 +1167,7 @@ Hyperlinks ✔ ✔ - ✖ + ✔ ✔ ✖ ✖ @@ -1496,4 +1496,4 @@ 1. Only BIFF8 files support Rich Text. Prior to that, comments could only be plain text -2. Only BIFF8 files support alignment and rotation. Prior to that, comments could only be unformatted text \ No newline at end of file +2. Only BIFF8 files support alignment and rotation. Prior to that, comments could only be unformatted text diff --git a/samples/templates/Excel2003XMLTest.xml b/samples/templates/Excel2003XMLTest.xml index d386a0cfd4..fb75ab06a8 100644 --- a/samples/templates/Excel2003XMLTest.xml +++ b/samples/templates/Excel2003XMLTest.xml @@ -549,7 +549,9 @@ AE - + + PhpSpreadsheet + diff --git a/src/PhpSpreadsheet/Reader/Xml.php b/src/PhpSpreadsheet/Reader/Xml.php index d9368d02f3..2fd7ef6cdf 100644 --- a/src/PhpSpreadsheet/Reader/Xml.php +++ b/src/PhpSpreadsheet/Reader/Xml.php @@ -595,6 +595,10 @@ public function loadIntoExisting($pFilename, Spreadsheet $spreadsheet) } } + if (isset($cell_ss['HRef'])) { + $spreadsheet->getActiveSheet()->getCell($cellRange)->getHyperlink()->setUrl($cell_ss['HRef']); + } + if ((isset($cell_ss['MergeAcross'])) || (isset($cell_ss['MergeDown']))) { $columnTo = $columnID; if (isset($cell_ss['MergeAcross'])) { diff --git a/tests/PhpSpreadsheetTests/Reader/XEEValidatorTest.php b/tests/PhpSpreadsheetTests/Reader/XEEValidatorTest.php index 372e51bbcf..59eabdf21f 100644 --- a/tests/PhpSpreadsheetTests/Reader/XEEValidatorTest.php +++ b/tests/PhpSpreadsheetTests/Reader/XEEValidatorTest.php @@ -2,11 +2,35 @@ namespace PhpOffice\PhpSpreadsheetTests\Reader; +use PhpOffice\PhpSpreadsheet\Cell\DataType; use PhpOffice\PhpSpreadsheet\Reader\BaseReader; +use PhpOffice\PhpSpreadsheet\Reader\Xml; +use PhpOffice\PhpSpreadsheet\Spreadsheet; use PHPUnit_Framework_TestCase; class XEEValidatorTest extends PHPUnit_Framework_TestCase { + /** + * @var Spreadsheet + */ + private $spreadsheetXEETest; + + /** + * @return Spreadsheet + */ + protected function loadXEETestFile() + { + if (!$this->spreadsheetXEETest) { + $filename = '../samples/templates/Excel2003XMLTest.xml'; + + // Load into this instance + $reader = new Xml(); + $this->spreadsheetXEETest = $reader->load($filename); + } + + return $this->spreadsheetXEETest; + } + /** * @dataProvider providerInvalidXML * @expectedException \PhpOffice\PhpSpreadsheet\Reader\Exception @@ -53,4 +77,19 @@ public function providerValidXML() return $tests; } + + /** + * Check if it can read XML Hyperlink correctly. + */ + public function testReadHyperlinks() + { + $spreadsheet = $this->loadXEETestFile(); + $firstSheet = $spreadsheet->getSheet(0); + + $hyperlink = $firstSheet->getCell('L1'); + + $this->assertEquals(DataType::TYPE_STRING, $hyperlink->getDataType()); + $this->assertEquals('PhpSpreadsheet', $hyperlink->getValue()); + $this->assertEquals('http://phpspreadsheet.readthedocs.io/', $hyperlink->getHyperlink()->getUrl()); + } }