2017-03-20 09:02:25 +00:00
|
|
|
## Writing Workbooks
|
|
|
|
|
|
|
|
For writing, the first step is to generate output data. The helper functions
|
|
|
|
`write` and `writeFile` will produce the data in various formats suitable for
|
|
|
|
dissemination. The second step is to actual share the data with the end point.
|
|
|
|
Assuming `workbook` is a workbook object:
|
|
|
|
|
2017-04-30 20:37:53 +00:00
|
|
|
<details>
|
2017-09-24 23:40:09 +00:00
|
|
|
<summary><b>nodejs write a file</b> (click to show)</summary>
|
2017-03-20 09:02:25 +00:00
|
|
|
|
2018-02-03 20:46:32 +00:00
|
|
|
`XLSX.writeFile` uses `fs.writeFileSync` in server environments:
|
2017-09-30 06:18:11 +00:00
|
|
|
|
2017-03-20 09:02:25 +00:00
|
|
|
```js
|
2017-09-30 06:18:11 +00:00
|
|
|
if(typeof require !== 'undefined') XLSX = require('xlsx');
|
2017-03-20 09:02:25 +00:00
|
|
|
/* output format determined by filename */
|
2017-09-30 06:18:11 +00:00
|
|
|
XLSX.writeFile(workbook, 'out.xlsb');
|
|
|
|
/* at this point, out.xlsb is a file that you can distribute */
|
2017-03-20 09:02:25 +00:00
|
|
|
```
|
|
|
|
|
2017-04-30 20:37:53 +00:00
|
|
|
</details>
|
|
|
|
|
2018-02-08 18:21:39 +00:00
|
|
|
<details>
|
|
|
|
<summary><b>Photoshop ExtendScript write a file</b> (click to show)</summary>
|
|
|
|
|
|
|
|
`writeFile` wraps the `File` logic in Photoshop and other ExtendScript targets.
|
|
|
|
The specified path should be an absolute path:
|
|
|
|
|
|
|
|
```js
|
|
|
|
#include "xlsx.extendscript.js"
|
|
|
|
/* output format determined by filename */
|
|
|
|
XLSX.writeFile(workbook, 'out.xlsx');
|
|
|
|
/* at this point, out.xlsx is a file that you can distribute */
|
|
|
|
```
|
|
|
|
|
|
|
|
The [`extendscript` demo](demos/extendscript/) includes a more complex example.
|
|
|
|
|
|
|
|
</details>
|
|
|
|
|
2017-04-30 20:37:53 +00:00
|
|
|
<details>
|
2018-02-03 20:46:32 +00:00
|
|
|
<summary><b>Browser add TABLE element to page</b> (click to show)</summary>
|
2017-09-30 06:18:11 +00:00
|
|
|
|
|
|
|
The `sheet_to_html` utility function generates HTML code that can be added to
|
|
|
|
any DOM element.
|
|
|
|
|
|
|
|
```js
|
|
|
|
var worksheet = workbook.Sheets[workbook.SheetNames[0]];
|
|
|
|
var container = document.getElementById('tableau');
|
|
|
|
container.innerHTML = XLSX.utils.sheet_to_html(worksheet);
|
|
|
|
```
|
|
|
|
|
2017-04-30 20:37:53 +00:00
|
|
|
</details>
|
2017-03-20 09:02:25 +00:00
|
|
|
|
2017-09-05 05:26:50 +00:00
|
|
|
<details>
|
2018-02-03 20:46:32 +00:00
|
|
|
<summary><b>Browser upload file (ajax)</b> (click to show)</summary>
|
2017-09-05 05:26:50 +00:00
|
|
|
|
2017-09-24 23:40:09 +00:00
|
|
|
A complete example using XHR is [included in the XHR demo](demos/xhr/), along
|
2017-09-05 05:26:50 +00:00
|
|
|
with examples for fetch and wrapper libraries. This example assumes the server
|
|
|
|
can handle Base64-encoded files (see the demo for a basic nodejs server):
|
|
|
|
|
|
|
|
```js
|
|
|
|
/* in this example, send a base64 string to the server */
|
|
|
|
var wopts = { bookType:'xlsx', bookSST:false, type:'base64' };
|
|
|
|
|
|
|
|
var wbout = XLSX.write(workbook,wopts);
|
|
|
|
|
2017-09-24 23:40:09 +00:00
|
|
|
var req = new XMLHttpRequest();
|
|
|
|
req.open("POST", "/upload", true);
|
2017-09-05 05:26:50 +00:00
|
|
|
var formdata = new FormData();
|
|
|
|
formdata.append('file', 'test.xlsx'); // <-- server expects `file` to hold name
|
|
|
|
formdata.append('data', wbout); // <-- `data` holds the base64-encoded data
|
2017-09-24 23:40:09 +00:00
|
|
|
req.send(formdata);
|
2017-09-05 05:26:50 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
</details>
|
|
|
|
|
2018-02-03 20:46:32 +00:00
|
|
|
<details>
|
|
|
|
<summary><b>Browser save file</b> (click to show)</summary>
|
|
|
|
|
|
|
|
`XLSX.writeFile` wraps a few techniques for triggering a file save:
|
|
|
|
|
|
|
|
- `URL` browser API creates an object URL for the file, which the library uses
|
|
|
|
by creating a link and forcing a click. It is supported in modern browsers.
|
|
|
|
- `msSaveBlob` is an IE10+ API for triggering a file save.
|
|
|
|
- `IE_FileSave` uses VBScript and ActiveX to write a file in IE6+ for Windows
|
|
|
|
XP and Windows 7. The shim must be included in the containing HTML page.
|
|
|
|
|
|
|
|
There is no standard way to determine if the actual file has been downloaded.
|
|
|
|
|
|
|
|
```js
|
|
|
|
/* output format determined by filename */
|
|
|
|
XLSX.writeFile(workbook, 'out.xlsb');
|
|
|
|
/* at this point, out.xlsb will have been downloaded */
|
|
|
|
```
|
|
|
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
<details>
|
|
|
|
<summary><b>Browser save file (compatibility)</b> (click to show)</summary>
|
|
|
|
|
|
|
|
`XLSX.writeFile` techniques work for most modern browsers as well as older IE.
|
|
|
|
For much older browsers, there are workarounds implemented by wrapper libraries.
|
|
|
|
|
|
|
|
[`FileSaver.js`](https://github.com/eligrey/FileSaver.js/) implements `saveAs`.
|
|
|
|
Note: `XLSX.writeFile` will automatically call `saveAs` if available.
|
|
|
|
|
|
|
|
```js
|
|
|
|
/* bookType can be any supported output type */
|
|
|
|
var wopts = { bookType:'xlsx', bookSST:false, type:'array' };
|
|
|
|
|
|
|
|
var wbout = XLSX.write(workbook,wopts);
|
|
|
|
|
|
|
|
/* the saveAs call downloads a file on the local machine */
|
|
|
|
saveAs(new Blob([wbout],{type:"application/octet-stream"}), "test.xlsx");
|
|
|
|
```
|
|
|
|
|
|
|
|
[`Downloadify`](https://github.com/dcneiner/downloadify) uses a Flash SWF button
|
|
|
|
to generate local files, suitable for environments where ActiveX is unavailable:
|
|
|
|
|
|
|
|
```js
|
|
|
|
Downloadify.create(id,{
|
|
|
|
/* other options are required! read the downloadify docs for more info */
|
|
|
|
filename: "test.xlsx",
|
|
|
|
data: function() { return XLSX.write(wb, {bookType:"xlsx", type:'base64'}); },
|
|
|
|
append: false,
|
|
|
|
dataType: 'base64'
|
|
|
|
});
|
|
|
|
```
|
|
|
|
|
|
|
|
The [`oldie` demo](demos/oldie/) shows an IE-compatible fallback scenario.
|
|
|
|
|
|
|
|
</details>
|
|
|
|
|
|
|
|
The [included demos](demos/) cover mobile apps and other special deployments.
|
|
|
|
|
2017-07-05 22:27:54 +00:00
|
|
|
### Writing Examples
|
2017-03-20 09:02:25 +00:00
|
|
|
|
|
|
|
- <http://sheetjs.com/demos/table.html> exporting an HTML table
|
2017-04-30 20:37:53 +00:00
|
|
|
- <http://sheetjs.com/demos/writexlsx.html> generates a simple file
|
2017-03-20 09:02:25 +00:00
|
|
|
|