forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			168 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			168 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: Tabulator
							 | 
						||
| 
								 | 
							
								pagination_prev: demos/frontend/index
							 | 
						||
| 
								 | 
							
								pagination_next: demos/net/index
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import current from '/version.js';
							 | 
						||
| 
								 | 
							
								import CodeBlock from '@theme/CodeBlock';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[Tabulator](https://tabulator.info/) is a powerful data table library designed
							 | 
						||
| 
								 | 
							
								for ease of use.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing
							 | 
						||
| 
								 | 
							
								data from spreadsheets.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Tabulator offers deep integration with SheetJS for importing and exporting data.
							 | 
						||
| 
								 | 
							
								This demo covers additional detail including document customization.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[Click here for a live standalone integration demo.](pathname:///tabulator/)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:::note Tested Deployments
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This demo was tested in the following deployments:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								| Browser      | Version | Date       |
							 | 
						||
| 
								 | 
							
								|:-------------|:--------|:-----------|
							 | 
						||
| 
								 | 
							
								| Chromium 125 | `6.2.1` | 2024-06-13 |
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:::
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Integration Details
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
							 | 
						||
| 
								 | 
							
								are appropriate for sites that use the Tabulator CDN scripts.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[The "Frameworks" section](/docs/getting-started/installation/frameworks) covers
							 | 
						||
| 
								 | 
							
								installation instructions for projects using a framework.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:::info pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								**The Tabulator script must be loaded after the SheetJS scripts!**
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```html
							 | 
						||
| 
								 | 
							
								<!-- Load SheetJS Scripts -->
							 | 
						||
| 
								 | 
							
								<script src="https://cdn.sheetjs.com/xlsx-latest/package/dist/shim.min.js"></script>
							 | 
						||
| 
								 | 
							
								<script src="https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js"></script>
							 | 
						||
| 
								 | 
							
								<!-- Tabulator must be loaded after SheetJS scripts -->
							 | 
						||
| 
								 | 
							
								<script type="text/javascript" src="https://unpkg.com/tabulator-tables@6.2.1/dist/js/tabulator.min.js"></script>
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:::
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Previewing Data
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Tabulator offers a special `setData` method for assigning data after the table
							 | 
						||
| 
								 | 
							
								is created. Coupled with the `autoColumns` option, Tabulator will automatically
							 | 
						||
| 
								 | 
							
								refresh the table.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:::info pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The library scans the first row object to determine the header labels. If a
							 | 
						||
| 
								 | 
							
								column is missing a value in the first object, it will not be loaded!
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:::
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Fetching Files
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								When files are stored remotely, the recommended approach is to fetch the files,
							 | 
						||
| 
								 | 
							
								parse with the SheetJS `read` method, generate arrays of objects from the target
							 | 
						||
| 
								 | 
							
								sheet using `sheet_to_json`, and load data with the Tabulator `setData` method.
							 | 
						||
| 
								 | 
							
								The following snippet fetches a sample file and loads the first sheet:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```html title="Fetching a spreadsheet and Displaying the first worksheet"
							 | 
						||
| 
								 | 
							
								<!-- Tabulator DIV -->
							 | 
						||
| 
								 | 
							
								<div id="htmlout"></div>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<script>
							 | 
						||
| 
								 | 
							
								/* Initialize Tabulator with the `autoColumns: true` setting */
							 | 
						||
| 
								 | 
							
								var tbl = new Tabulator('#htmlout', { autoColumns: true });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* fetch and display https://docs.sheetjs.com/pres.numbers */
							 | 
						||
| 
								 | 
							
								(function() { try {
							 | 
						||
| 
								 | 
							
								  fetch("https://docs.sheetjs.com/pres.numbers")
							 | 
						||
| 
								 | 
							
								    .then(function(res) { return res.arrayBuffer(); })
							 | 
						||
| 
								 | 
							
								    .then(function(ab) {
							 | 
						||
| 
								 | 
							
								      /* parse ArrayBuffer */
							 | 
						||
| 
								 | 
							
								      var wb = XLSX.read(ab);
							 | 
						||
| 
								 | 
							
								      /* get first worksheet from SheetJS workbook object */
							 | 
						||
| 
								 | 
							
								      var ws = wb.Sheets[wb.SheetNames[0]];
							 | 
						||
| 
								 | 
							
								      /* generate array of row objects */
							 | 
						||
| 
								 | 
							
								      var data = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
							 | 
						||
| 
								 | 
							
								      /* update Tabulator */
							 | 
						||
| 
								 | 
							
								      tbl.setData(data);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								} catch(e) {} })();
							 | 
						||
| 
								 | 
							
								</script>
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Local Files
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Tabulator provides a special `import` method to show a dialog and load data.
							 | 
						||
| 
								 | 
							
								Since the importer requires the raw binary data, the method must be called with
							 | 
						||
| 
								 | 
							
								the third argument set to `"buffer"`:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```html title="Parsing a local spreadsheet and Displaying the first worksheet"
							 | 
						||
| 
								 | 
							
								<button id="imp"><b>Click here to import from XLSX file</b></button>
							 | 
						||
| 
								 | 
							
								<!-- Tabulator DIV -->
							 | 
						||
| 
								 | 
							
								<div id="htmlout"></div>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<script>
							 | 
						||
| 
								 | 
							
								/* Initialize Tabulator with the `autoColumns: true` setting */
							 | 
						||
| 
								 | 
							
								var tbl = new Tabulator('#htmlout', { autoColumns: true });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* use Tabulator SheetJS integration to import data */
							 | 
						||
| 
								 | 
							
								document.getElementById("imp").addEventListener("click", function() {
							 | 
						||
| 
								 | 
							
								  tbl.import("xlsx", ".xlsx", "buffer");
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								</script>
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Saving Data
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Tabulator provides a special `download` method to initiate the export:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```html title="Exporting data from Tabulator to XLSX"
							 | 
						||
| 
								 | 
							
								<input type="submit" value="Export to XLSX!" id="xport" onclick="export_xlsx();">
							 | 
						||
| 
								 | 
							
								<!-- Tabulator DIV -->
							 | 
						||
| 
								 | 
							
								<div id="htmlout"></div>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<script>
							 | 
						||
| 
								 | 
							
								/* Initialize Tabulator with the `autoColumns: true` setting */
							 | 
						||
| 
								 | 
							
								var tbl = new Tabulator('#htmlout', { autoColumns: true });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* use Tabulator SheetJS integration to import data */
							 | 
						||
| 
								 | 
							
								function export_xlsx() {
							 | 
						||
| 
								 | 
							
								  /* use Tabulator SheetJS integration */
							 | 
						||
| 
								 | 
							
								  tbl.download("xlsx", "SheetJSTabulator.xlsx");
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								</script>
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[The official documentation](https://tabulator.info/docs/6.2/download#xlsx)
							 | 
						||
| 
								 | 
							
								covers supported options.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Post-processing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The `documentProcessing` event handler is called after Tabulator generates a
							 | 
						||
| 
								 | 
							
								SheetJS workbook object. This allows for adjustments before creating the final
							 | 
						||
| 
								 | 
							
								workbook file. The following example adds a second sheet that includes the date:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js title="Exporting data and metadata"
							 | 
						||
| 
								 | 
							
								tbl.download("xlsx", "SheetJSTabulator.xlsx", {
							 | 
						||
| 
								 | 
							
								  documentProcessing: function(wb) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* create a new worksheet */
							 | 
						||
| 
								 | 
							
								    var ws = XLSX.utils.aoa_to_sheet([
							 | 
						||
| 
								 | 
							
								      ["SheetJS + Tabulator Demo"],
							 | 
						||
| 
								 | 
							
								      ["Export Date:", new Date()]
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* add to workbook */
							 | 
						||
| 
								 | 
							
								    XLSX.utils.book_append_sheet(wb, ws, "Metadata");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return wb;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 |