Skip to content

Commit 7aa6233

Browse files
yasar-luoPowerKiKi
authored andcommitted
Added xml reader hyperlink support
Closes #223
1 parent aef4d71 commit 7aa6233

File tree

5 files changed

+48
-4
lines changed

5 files changed

+48
-4
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1010
### Added
1111

1212
- Support for chart fill color - @CrazyBite [#158](https://github.com/PHPOffice/PhpSpreadsheet/pull/158)
13+
- Support for read Hyperlink for xml - [@GreatHumorist](https://github.com/GreatHumorist) [#223](https://github.com/PHPOffice/PhpSpreadsheet/pull/223)
1314

1415
### Changed
1516

docs/references/features-cross-reference.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1167,7 +1167,7 @@
11671167
<td style="padding-left: 1em;">Hyperlinks</td>
11681168
<td style="text-align: center; color: green;">✔</td>
11691169
<td style="text-align: center; color: green;">✔</td>
1170-
<td style="text-align: center; color: red;"></td>
1170+
<td style="text-align: center; color: green;"></td>
11711171
<td style="text-align: center; color: green;">✔</td>
11721172
<td style="text-align: center; color: red;">✖</td>
11731173
<td style="text-align: center; color: red;">✖</td>
@@ -1496,4 +1496,4 @@
14961496
</table>
14971497

14981498
1. Only BIFF8 files support Rich Text. Prior to that, comments could only be plain text
1499-
2. Only BIFF8 files support alignment and rotation. Prior to that, comments could only be unformatted text
1499+
2. Only BIFF8 files support alignment and rotation. Prior to that, comments could only be unformatted text

samples/templates/Excel2003XMLTest.xml

+3-1
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,9 @@
549549
<Data ss:Type="String">AE</Data>
550550
</Cell>
551551
<Cell ss:StyleID="ce5"/>
552-
<Cell ss:StyleID="ce5"/>
552+
<Cell ss:StyleID="ce5" ss:HRef="http://phpspreadsheet.readthedocs.io/">
553+
<Data ss:Type="String">PhpSpreadsheet</Data>
554+
</Cell>
553555
<Cell ss:StyleID="ce5"/>
554556
<Cell ss:StyleID="ce5"/>
555557
<Cell ss:StyleID="ce5"/>

src/PhpSpreadsheet/Reader/Xml.php

+4
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,10 @@ public function loadIntoExisting($pFilename, Spreadsheet $spreadsheet)
610610
}
611611
}
612612

613+
if (isset($cell_ss['HRef'])) {
614+
$spreadsheet->getActiveSheet()->getCell($cellRange)->getHyperlink()->setUrl($cell_ss['HRef']);
615+
}
616+
613617
if ((isset($cell_ss['MergeAcross'])) || (isset($cell_ss['MergeDown']))) {
614618
$columnTo = $columnID;
615619
if (isset($cell_ss['MergeAcross'])) {

tests/PhpSpreadsheetTests/Reader/XEEValidatorTest.php

+38-1
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,35 @@
22

33
namespace PhpOffice\PhpSpreadsheetTests\Reader;
44

5+
use PhpOffice\PhpSpreadsheet\Cell\DataType;
56
use PhpOffice\PhpSpreadsheet\Reader\BaseReader;
6-
use PhpOffice\PhpSpreadsheet\Reader\Exception;
77
use PhpOffice\PhpSpreadsheet\Reader\Xml;
8+
use PhpOffice\PhpSpreadsheet\Spreadsheet;
89
use PHPUnit_Framework_TestCase;
910

1011
class XEEValidatorTest extends PHPUnit_Framework_TestCase
1112
{
13+
/**
14+
* @var Spreadsheet
15+
*/
16+
private $spreadsheetXEETest;
17+
18+
/**
19+
* @return Spreadsheet
20+
*/
21+
protected function loadXEETestFile()
22+
{
23+
if (!$this->spreadsheetXEETest) {
24+
$filename = '../samples/templates/Excel2003XMLTest.xml';
25+
26+
// Load into this instance
27+
$reader = new Xml();
28+
$this->spreadsheetXEETest = $reader->load($filename);
29+
}
30+
31+
return $this->spreadsheetXEETest;
32+
}
33+
1234
/**
1335
* @dataProvider providerInvalidXML
1436
* @expectedException \PhpOffice\PhpSpreadsheet\Reader\Exception
@@ -77,4 +99,19 @@ public function providerValidXML()
7799

78100
return $tests;
79101
}
102+
103+
/**
104+
* Check if it can read XML Hyperlink correctly.
105+
*/
106+
public function testReadHyperlinks()
107+
{
108+
$spreadsheet = $this->loadXEETestFile();
109+
$firstSheet = $spreadsheet->getSheet(0);
110+
111+
$hyperlink = $firstSheet->getCell('L1');
112+
113+
self::assertEquals(DataType::TYPE_STRING, $hyperlink->getDataType());
114+
self::assertEquals('PhpSpreadsheet', $hyperlink->getValue());
115+
self::assertEquals('http://phpspreadsheet.readthedocs.io/', $hyperlink->getHyperlink()->getUrl());
116+
}
80117
}

0 commit comments

Comments
 (0)