2022-06-09 21:43:33 +00:00
|
|
|
---
|
|
|
|
sidebar_position: 2
|
|
|
|
---
|
|
|
|
|
2022-05-27 14:59:53 +00:00
|
|
|
# Hyperlinks
|
|
|
|
|
|
|
|
<details>
|
|
|
|
<summary><b>Format Support</b> (click to show)</summary>
|
|
|
|
|
|
|
|
**Cell Hyperlinks**: XLSX/M, XLSB, BIFF8 XLS, XLML, ODS, HTML
|
|
|
|
|
|
|
|
**Tooltips**: XLSX/M, XLSB, BIFF8 XLS, XLML
|
|
|
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
Hyperlinks are stored in the `l` key of cell objects. The `Target` field of the
|
|
|
|
hyperlink object is the target of the link, including the URI fragment. Tooltips
|
|
|
|
are stored in the `Tooltip` field and are displayed when hovering over the text.
|
|
|
|
|
|
|
|
For example, the following snippet creates a link from cell `A3` to
|
|
|
|
<https://sheetjs.com> with the tip `"Find us @ SheetJS.com!"`:
|
|
|
|
|
|
|
|
```js
|
|
|
|
ws["A1"].l = { Target: "https://sheetjs.com", Tooltip: "Find us @ SheetJS.com!" };
|
|
|
|
```
|
|
|
|
|
|
|
|
Note that Excel does not automatically style hyperlinks. They will be displayed
|
|
|
|
using default style. <a href="https://sheetjs.com/pro">SheetJS Pro Basic</a>
|
|
|
|
extends this export with support for hyperlink styling.
|
|
|
|
|
2022-08-29 20:34:30 +00:00
|
|
|
<details><summary><b>Live Example</b> (click to show)</summary>
|
|
|
|
|
|
|
|
```jsx live
|
|
|
|
/* The live editor requires this function wrapper */
|
|
|
|
function ExportSimpleLink(props) {
|
|
|
|
|
|
|
|
/* Callback invoked when the button is clicked */
|
|
|
|
const xport = React.useCallback(() => {
|
|
|
|
/* Create worksheet */
|
|
|
|
var ws = XLSX.utils.aoa_to_sheet([ [ "Link", "No Link" ] ]);
|
|
|
|
/* Add link */
|
|
|
|
ws["A1"].l = {
|
|
|
|
Target: "https://sheetjs.com",
|
|
|
|
Tooltip: "Find us @ SheetJS.com!"
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Export to file (start a download) */
|
|
|
|
var wb = XLSX.utils.book_new();
|
|
|
|
XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
|
|
|
|
XLSX.writeFile(wb, "SheetJSSimpleLink.xlsx");
|
|
|
|
});
|
|
|
|
|
|
|
|
return (<button onClick={xport}><b>Export XLSX!</b></button>);
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
</details>
|
|
|
|
|
2022-05-27 14:59:53 +00:00
|
|
|
## Remote Links
|
|
|
|
|
|
|
|
HTTP / HTTPS links can be used directly:
|
|
|
|
|
|
|
|
```js
|
2022-07-28 05:36:09 +00:00
|
|
|
ws["A2"].l = { Target: "https://docs.sheetjs.com/docs/csf/features/hyperlinks" };
|
2022-05-27 14:59:53 +00:00
|
|
|
ws["A3"].l = { Target: "http://localhost:7262/yes_localhost_works" };
|
|
|
|
```
|
|
|
|
|
|
|
|
Excel also supports `mailto` email links with subject line:
|
|
|
|
|
|
|
|
```js
|
|
|
|
ws["A4"].l = { Target: "mailto:ignored@dev.null" };
|
|
|
|
ws["A5"].l = { Target: "mailto:ignored@dev.null?subject=Test Subject" };
|
|
|
|
```
|
|
|
|
|
|
|
|
## Local Links
|
|
|
|
|
|
|
|
Links to absolute paths should use the `file://` URI scheme:
|
|
|
|
|
|
|
|
```js
|
|
|
|
ws["B1"].l = { Target: "file:///SheetJS/t.xlsx" }; /* Link to /SheetJS/t.xlsx */
|
|
|
|
ws["B2"].l = { Target: "file:///c:/SheetJS.xlsx" }; /* Link to c:\SheetJS.xlsx */
|
|
|
|
```
|
|
|
|
|
|
|
|
Links to relative paths can be specified without a scheme:
|
|
|
|
|
|
|
|
```js
|
|
|
|
ws["B3"].l = { Target: "SheetJS.xlsb" }; /* Link to SheetJS.xlsb */
|
|
|
|
ws["B4"].l = { Target: "../SheetJS.xlsm" }; /* Link to ../SheetJS.xlsm */
|
|
|
|
```
|
|
|
|
|
2022-07-28 05:36:09 +00:00
|
|
|
:::caution
|
|
|
|
|
2022-05-27 14:59:53 +00:00
|
|
|
Relative Paths have undefined behavior in the SpreadsheetML 2003 format. Excel
|
|
|
|
2019 will treat a `..\` parent mark as two levels up.
|
|
|
|
|
2022-07-28 05:36:09 +00:00
|
|
|
:::
|
|
|
|
|
2022-05-27 14:59:53 +00:00
|
|
|
## Internal Links
|
|
|
|
|
|
|
|
Links where the target is a cell or range or defined name in the same workbook
|
|
|
|
("Internal Links") are marked with a leading hash character:
|
|
|
|
|
|
|
|
```js
|
|
|
|
ws["C1"].l = { Target: "#E2" }; /* Link to cell E2 */
|
|
|
|
ws["C2"].l = { Target: "#Sheet2!E2" }; /* Link to cell E2 in sheet Sheet2 */
|
|
|
|
ws["C3"].l = { Target: "#SomeDefinedName" }; /* Link to Defined Name */
|
|
|
|
```
|
|
|
|
|
|
|
|
## HTML
|
|
|
|
|
|
|
|
The HTML DOM parser will process `<a>` links in the table:
|
|
|
|
|
|
|
|
```jsx live
|
|
|
|
/* The live editor requires this function wrapper */
|
|
|
|
function ExportHyperlink(props) {
|
|
|
|
|
|
|
|
/* Callback invoked when the button is clicked */
|
|
|
|
const xport = React.useCallback(() => {
|
|
|
|
/* Create worksheet from HTML DOM TABLE */
|
|
|
|
const table = document.getElementById("TableLink");
|
|
|
|
const wb = XLSX.utils.table_to_book(table);
|
|
|
|
|
|
|
|
/* Export to file (start a download) */
|
2022-08-29 20:34:30 +00:00
|
|
|
XLSX.writeFile(wb, "SheetJSHTMLHyperlink.xlsx");
|
2022-05-27 14:59:53 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
return (<>
|
|
|
|
<button onClick={xport}><b>Export XLSX!</b></button>
|
|
|
|
<table id="TableLink"><tbody><tr><td>
|
|
|
|
Do not click here, for it is link-less.
|
|
|
|
</td></tr><tr><td>
|
|
|
|
<a href="https://sheetjs.com">Click here for more info</a>
|
|
|
|
</td></tr></tbody></table>
|
|
|
|
</>);
|
|
|
|
}
|
|
|
|
```
|