## 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:
nodejs write a file (click to show) `XLSX.writeFile` uses `fs.writeFileSync` in server environments: ```js if(typeof require !== 'undefined') XLSX = require('xlsx'); /* output format determined by filename */ XLSX.writeFile(workbook, 'out.xlsb'); /* at this point, out.xlsb is a file that you can distribute */ ```
Photoshop ExtendScript write a file (click to show) `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.
Browser add TABLE element to page (click to show) 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); ```
Browser upload file (ajax) (click to show) A complete example using XHR is [included in the XHR demo](demos/xhr/), along 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); var req = new XMLHttpRequest(); req.open("POST", "/upload", true); 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 req.send(formdata); ```
Browser save file (click to show) `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 */ ```
Browser save file (compatibility) (click to show) `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.
The [included demos](demos/) cover mobile apps and other special deployments. ### Writing Examples - exporting an HTML table - generates a simple file