Roadmap
Most scenarios involving spreadsheets and data can be divided into 5 parts:
-
Acquire Data: Data may be stored anywhere: local or remote files, databases, HTML TABLE, or even generated programmatically in the web browser.
-
Extract Data: For spreadsheet files, this involves parsing raw bytes to read the cell data. For general JS data, this involves reshaping the data.
-
Process Data: From generating summary statistics to cleaning data records, this step is the heart of the problem.
-
Package Data: This can involve making a new spreadsheet or serializing with
JSON.stringify
or writing XML or simply flattening data for UI tools. -
Release Data: Spreadsheet files can be uploaded to a server or written locally. Data can be presented to users in an HTML TABLE or data grid.
A common problem involves generating a valid spreadsheet export from data stored in an HTML table.
flowchart LR
server[(Backend\nServer)]
html{{HTML\nTABLE}}
wb(((SheetJS\nWorkbook)))
wb2(((Modified\nWorkbook)))
file[(workbook\nfile)]
server --> |"Get Table (1)\n."| html
html --> |"Parse Table (2)\n`table_to_book`"| wb
wb --> |"Add data (3)\n`sheet_add_aoa`"| wb2
wb2 --> |"Export file (4,5)\n`writeFile`"| file
In this example, an HTML TABLE on the page will be scraped, a row will be added
to the bottom with the date of the report, and a new file will be generated and
downloaded locally. XLSX.writeFile
takes care of packaging the data and
attempting a local download:
// Acquire Data (reference to the HTML table)
var table_elt = document.getElementById("my-table-id");
// Extract Data (create a workbook object from the table)
var workbook = XLSX.utils.table_to_book(table_elt);
// Process Data (add a new row)
var ws = workbook.Sheets["Sheet1"];
XLSX.utils.sheet_add_aoa(ws, [["Created "+new Date().toISOString()]], {origin:-1});
// Package and Release Data (`writeFile` tries to write and save an XLSB file)
XLSX.writeFile(workbook, "Report.xlsb");
This library tries to simplify steps 2 and 4 with functions to extract useful
data from spreadsheet files (read
/ readFile
) and generate new spreadsheet
files from data (write
/ writeFile
). Additional utility functions like
table_to_book
work with other common data sources like HTML tables.
This documentation and various demo projects cover a number of common scenarios and approaches for steps 1 and 5.
Utility functions help with step 3.
Highlights​
"Demos" describes special deployments using SheetJS in tandem with other tools and libraries.
"Data Import" describes solutions for common data import scenarios.
"Data Export" describes solutions for common data export scenarios.
"Data Processing" describes solutions for common workbook processing and manipulation scenarios.
"Utility Functions" details utility functions for translating JSON Arrays and other common JS structures into worksheet objects.