SheetJS 75845a0ca7 version bump 0.11.19: browser writeFile
- IE6-9 ActiveX + VBScript shim
- `writeFile` supported in browser
- `oldie` demo for IE write strategies
2018-02-03 15:46:32 -05:00
index.html version bump 0.11.19: browser writeFile 2018-02-03 15:46:32 -05:00 version bump 0.11.19: browser writeFile 2018-02-03 15:46:32 -05:00
shim.js version bump 0.11.19: browser writeFile 2018-02-03 15:46:32 -05:00
xlsx.full.min.js improved plaintext parsing 2017-08-09 18:38:23 -04:00


The sheet_to_json utility function generates output arrays suitable for use with other JS libraries such as data grids for previewing data. After extensive testing, canvas-datagrid stood out as a very high-performance grid with an incredibly simple API.

This demo is available at

Obtaining the Library

The canvas-datagrid npm nodule includes a minified script dist/canvas-datagrid.js that can be directly inserted as a script tag. The unpkg CDN also exposes the latest version:

<script src=""></script>

Previewing Data

The HTML document needs a container element:

<div id="gridctr"></div>

Grid initialization is a one-liner:

var grid = canvasDatagrid({
  parentNode: document.getElementById('gridctr'),
  data: []

For large data sets, it's necessary to constrain the size of the grid. = '100%'; = '100%';

Once the workbook is read and the worksheet is selected, assigning the data variable automatically updates the view: = XLSX.utils.sheet_to_json(ws, {header:1});

This demo previews the first worksheet, but it is easy to add buttons and other features to support multiple worksheets.


canvas-datagrid handles the entire edit cycle. No intervention is necessary.

Saving Data is immediately readable and can be converted back to a worksheet. Some versions return an array-like object without the length, so a little bit of preparation may be needed:

/* converts an array of array-like objects into an array of arrays */
function prep(arr) {
  var out = [];
  for(var i = 0; i < arr.length; ++i) {
    if(!arr[i]) continue;
    if(Array.isArray(arr[i])) { out[i] = arr[i]; continue };
    var o = new Array();
    Object.keys(arr[i]).forEach(function(k) { o[+k] = arr[i][k] });
    out[i] = o;
  return out;

/* build worksheet from the grid data */
var ws = XLSX.utils.aoa_to_sheet(prep(;

/* build up workbook */
var wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, 'SheetJS');

/* generate download */
XLSX.writeFile(wb, "SheetJS.xlsx");

Additional Features

This demo barely scratches the surface. The underlying grid component includes many additional features including massive data streaming, sorting and styling.