HyperlinkTest.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
  3. use PhpOffice\PhpSpreadsheet\NamedRange;
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
  6. class HyperlinkTest extends AbstractFunctional
  7. {
  8. public function testReadAndWriteHyperlinks(): void
  9. {
  10. $spreadsheet = new Spreadsheet();
  11. $sheet1 = $spreadsheet->getActiveSheet();
  12. $sheet1->setTitle('Sheet One');
  13. $sheet1->getCell('A1')->setValue(100);
  14. $sheet1->getCell('B1')->setValue('this is b1');
  15. $spreadsheet->addNamedRange(new NamedRange('namedb1', $sheet1, '$B$1'));
  16. $sheet1->setCellValue('A2', 'link to same sheet');
  17. $sheet1->getCell('A2')->getHyperlink()->setUrl("sheet://'Sheet One'!A1");
  18. $sheet1->setCellValue('A3', 'link to defined name');
  19. $sheet1->getCell('A3')->getHyperlink()->setUrl('sheet://namedb1');
  20. $sheet2 = $spreadsheet->createSheet();
  21. $sheet2->setTitle('Sheet Two');
  22. $sheet2->setCellValue('A2', 'link to other sheet');
  23. $sheet2->getCell('A2')->getHyperlink()->setUrl("sheet://'Sheet One'!A1");
  24. $sheet2->setCellValue('A3', 'external link');
  25. $sheet2->getCell('A3')->getHyperlink()->setUrl('https://www.example.com');
  26. $sheet2->setCellValue('A4', 'external link with anchor');
  27. $sheet2->getCell('A4')->getHyperlink()->setUrl('https://www.example.com#anchor');
  28. $sheet2->getCell('A4')->getHyperlink()->setTooltip('go to anchor tag on example.com');
  29. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
  30. $spreadsheet->disconnectWorksheets();
  31. $rsheet1 = $reloadedSpreadsheet->getSheet(0);
  32. self::assertSame('link to same sheet', $rsheet1->getCell('A2')->getValue());
  33. self::assertSame("sheet://'Sheet One'!A1", $rsheet1->getCell('A2')->getHyperlink()->getUrl());
  34. self::assertSame('link to defined name', $rsheet1->getCell('A3')->getValue());
  35. self::assertSame('sheet://namedb1', $rsheet1->getCell('A3')->getHyperlink()->getUrl());
  36. $rsheet2 = $reloadedSpreadsheet->getSheet(1);
  37. self::assertSame('link to other sheet', $rsheet2->getCell('A2')->getValue());
  38. self::assertSame("sheet://'Sheet One'!A1", $rsheet2->getCell('A2')->getHyperlink()->getUrl());
  39. self::assertSame('external link', $rsheet2->getCell('A3')->getValue());
  40. self::assertSame('https://www.example.com', $rsheet2->getCell('A3')->getHyperlink()->getUrl());
  41. self::assertSame('https://www.example.com#anchor', $rsheet2->getCell('A4')->getHyperlink()->getUrl());
  42. self::assertSame('external link with anchor', $rsheet2->getCell('A4')->getValue());
  43. self::assertSame('go to anchor tag on example.com', $rsheet2->getCell('A4')->getHyperlink()->getToolTip());
  44. $reloadedSpreadsheet->disconnectWorksheets();
  45. }
  46. }