Products

Worksheet Tables

Jspreadsheet v12 introduces worksheet tables with advanced filtering capabilities, enabling you to define named regions with headers and filters. Full compatibility with other spreadsheet software allows users to create calculations using specific syntax to reference these structured data regions.

Documentation

Methods

Methods available for programmatic table interaction:

Method Description
getTable(name) Retrieve table configuration by name
setTable(config) Create or update a table with the specified configuration
resetTable(name) Remove table formatting and filters from the named table

Settings

Property Description
tables: Table[] Define structured table ranges within the worksheet

Table[]

Property Description
type?: 'table' Table type identifier
name?: string Unique table identifier
range?: string Cell range definition (e.g., 'A1:D10')
theme?: string Visual theme for table styling
headerRow?: boolean Treat the first row as column headers
totalRow?: boolean Enable total row at the bottom of the table
bandedRows?: boolean Apply alternating row background colors
bandedColumns?: boolean Alternate column colors
firstColumn?: boolean Apply bold formatting to first column
lastColumn?: boolean Apply bold formatting to last column
filters?: boolean Enable dropdown filters in header row

Examples

<html>
<script src="https://jspreadsheet.com/v12/jspreadsheet.js"></script>
<script src="https://jsuites.net/v6/jsuites.js"></script>
<link rel="stylesheet" href="https://jspreadsheet.com/v12/jspreadsheet.css" type="text/css" />
<link rel="stylesheet" href="https://jsuites.net/v6/jsuites.css" type="text/css" />

<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />

<div id="spreadsheet"></div>

<script>
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ODEzMGY1ODg1MGEyNTkwZmM1OWI5ZTEzMDQzMGFhM2ZmOTZjOTU5ZjU4Y2Q1Mzg3NGMyNTI2Njk5M2U5OGI4ZmQ0NjVmYzZhOGUzNTRmMmQ3ZjhkODY0ZThiOGE3MTYzNGU0ZDE3NmQxMDBjYWQ5YzMyN2M2NzZkZWZhZTZiODAsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpVNU56azJNREV3TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2lkMlZpSWl3aWJHOWpZV3hvYjNOMElsMHNJbkJzWVc0aU9pSXpOQ0lzSW5OamIzQmxJanBiSW5ZM0lpd2lkamdpTENKMk9TSXNJbll4TUNJc0luWXhNU0lzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

// Create the spreadsheet
let spreadsheet = jspreadsheet(document.getElementById('spreadsheet'), {
    tableOverflow: true,
    tableWidth: 700,
    worksheets: [{
        minDimensions: [10,10],
        tables: [{
            name: 'TABLE1',
            range: 'B2:E7',
            bandedRows: true,
            filters: true,
        }]
    }]
});
</script>
</html>
import React, { useRef } from "react";
import { Spreadsheet, Worksheet } from "@jspreadsheet/react";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";

// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ODEzMGY1ODg1MGEyNTkwZmM1OWI5ZTEzMDQzMGFhM2ZmOTZjOTU5ZjU4Y2Q1Mzg3NGMyNTI2Njk5M2U5OGI4ZmQ0NjVmYzZhOGUzNTRmMmQ3ZjhkODY0ZThiOGE3MTYzNGU0ZDE3NmQxMDBjYWQ5YzMyN2M2NzZkZWZhZTZiODAsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpVNU56azJNREV3TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2lkMlZpSWl3aWJHOWpZV3hvYjNOMElsMHNJbkJzWVc0aU9pSXpOQ0lzSW5OamIzQmxJanBiSW5ZM0lpd2lkamdpTENKMk9TSXNJbll4TUNJc0luWXhNU0lzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

export default function App() {
    const spreadsheet = useRef();

    // Table configuration
    const tables = [{
        name: 'TABLE1',
        range: 'B2:E7',
        bandedRows: true,
        filters: true,
    }];

    // Render react component
    return (
        <Spreadsheet ref={spreadsheet} tableOverflow={true} tableWidth={700}>
            <Worksheet minDimensions={[10,10]} tables={tables} />
        </Spreadsheet>
    );
}
<template>
    <Spreadsheet ref="spreadsheet" :tableOverflow="true" :tableWidth="700">
        <Worksheet :minDimensions="[10,10]" :tables="tables" />
    </Spreadsheet>
</template>

<script>
import { Spreadsheet, Worksheet } from "@jspreadsheet/vue";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";

// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ODEzMGY1ODg1MGEyNTkwZmM1OWI5ZTEzMDQzMGFhM2ZmOTZjOTU5ZjU4Y2Q1Mzg3NGMyNTI2Njk5M2U5OGI4ZmQ0NjVmYzZhOGUzNTRmMmQ3ZjhkODY0ZThiOGE3MTYzNGU0ZDE3NmQxMDBjYWQ5YzMyN2M2NzZkZWZhZTZiODAsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpVNU56azJNREV3TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2lkMlZpSWl3aWJHOWpZV3hvYjNOMElsMHNJbkJzWVc0aU9pSXpOQ0lzSW5OamIzQmxJanBiSW5ZM0lpd2lkamdpTENKMk9TSXNJbll4TUNJc0luWXhNU0lzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

export default {
    components: {
        Spreadsheet,
        Worksheet,
    },
    data() {
        // Table configuration
        const tables = [{
            name: 'TABLE1',
            range: 'B2:E7',
            bandedRows: true,
            filters: true,
        }];

        return {
            tables,
        };
    }
}
</script>
import { Component, ViewChild, ElementRef } from "@angular/core";
import jspreadsheet from "jspreadsheet";
import "jspreadsheet/dist/jspreadsheet.css"
import "jsuites/dist/jsuites.css"

// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ODEzMGY1ODg1MGEyNTkwZmM1OWI5ZTEzMDQzMGFhM2ZmOTZjOTU5ZjU4Y2Q1Mzg3NGMyNTI2Njk5M2U5OGI4ZmQ0NjVmYzZhOGUzNTRmMmQ3ZjhkODY0ZThiOGE3MTYzNGU0ZDE3NmQxMDBjYWQ5YzMyN2M2NzZkZWZhZTZiODAsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpVNU56azJNREV3TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2lkMlZpSWl3aWJHOWpZV3hvYjNOMElsMHNJbkJzWVc0aU9pSXpOQ0lzSW5OamIzQmxJanBiSW5ZM0lpd2lkamdpTENKMk9TSXNJbll4TUNJc0luWXhNU0lzSW1Ob1lYSjBjeUlzSW1admNtMXpJaXdpWm05eWJYVnNZU0lzSW5CaGNuTmxjaUlzSW5KbGJtUmxjaUlzSW1OdmJXMWxiblJ6SWl3aWFXMXdiM0owWlhJaUxDSmlZWElpTENKMllXeHBaR0YwYVc5dWN5SXNJbk5sWVhKamFDSXNJbkJ5YVc1MElpd2ljMmhsWlhSeklpd2lZMnhwWlc1MElpd2ljMlZ5ZG1WeUlpd2ljMmhoY0dWeklpd2labTl5YldGMElsMHNJbVJsYlc4aU9uUnlkV1Y5');

@Component({
    standalone: true,
    selector: "app-root",
    template: `<div #spreadsheet></div>`,
})
export class AppComponent {
    @ViewChild("spreadsheet") spreadsheet: ElementRef;
    // Worksheets
    worksheets: jspreadsheet.worksheetInstance[];
    // Create a new data grid
    ngAfterViewInit() {
        // Create spreadsheet
        this.worksheets = jspreadsheet(this.spreadsheet.nativeElement, {
            tableOverflow: true,
            tableWidth: 700,
            worksheets: [{
                minDimensions: [10,10],
                tables: [{
                    name: 'TABLE1',
                    range: 'B2:E7',
                    bandedRows: true,
                    filters: true,
                }]
            }]
        });
    }
}