--- title: Roadmap pagination_prev: getting-started/examples/index sidebar_position: 3 --- Most scenarios involving spreadsheets and data can be divided into 5 parts: 1) **Acquire Data**: Data may be stored anywhere: local or remote files, databases, HTML TABLE, or even generated programmatically in the web browser. 2) **Extract Data**: For spreadsheet files, this involves parsing raw bytes to read the cell data. For general JS data, this involves reshaping the data. 3) **Process Data**: From generating summary statistics to cleaning data records, this step is the heart of the problem. 4) **Package Data**: This can involve making a new spreadsheet or serializing with `JSON.stringify` or writing XML or simply flattening data for UI tools. 5) **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. ```mermaid 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: ```js // 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"](/docs/demos) describes special deployments using SheetJS in tandem with other tools and libraries. ["Data Import"](/docs/solutions/input) describes solutions for common data import scenarios. ["Data Export"](/docs/solutions/output) describes solutions for common data export scenarios. ["Data Processing"](/docs/solutions/processing) describes solutions for common workbook processing and manipulation scenarios. ["Utility Functions"](/docs/api/utilities) details utility functions for translating JSON Arrays and other common JS structures into worksheet objects.