[{"id":"29a4ab0f-edd1-45e1-87df-0b8b4bb068b3","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"64b61a79-5817-4746-b591-28d4d5462c0a","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"6edef660-641f-4cd8-84f6-571130f37ae2","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"89a3ee5c-06c4-49c4-ac61-8325ba4bcca1","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"1e898427-e706-440e-9077-b35c7a5b8f46","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"4266ec12-a87a-444b-a8af-beff39a7defe","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"fd867fe6-72e0-4e45-bbac-edc72e608b08","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"fad338cd-7c96-48b9-a12d-1b979ba886b2","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"6fb42249-b832-4656-9137-35d9948bea1c","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"6e353a93-c1d4-4387-bad5-4a07fd18ed3a","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"acbe820e-65b4-4bd6-bcf3-a9d5b16163da","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"167a076a-6a93-49f6-8bf8-adee9abd9817","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"7fb1e240-d39d-4391-986f-c2d40adfb011","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"09cc5e9f-99c9-4258-b69c-ca5bb09a6b16","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"0b4ea8fb-4e7b-4028-9393-d1177a68ec17","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"35b8ea08-9ca6-49eb-a021-0c806de4ff96","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"7bace066-1638-4034-82eb-0db8c15f5bd1","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"7ec5ea8e-419f-40aa-b67d-301fa3e7b025","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"38f78942-4ca0-4631-a2d8-32dcfd6157a6","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"fc1d5e2a-5d1c-4479-ac87-c726c03d49aa","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"dd70702b-48a7-4896-b92d-db78ff9e52b0","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"cda2a866-9746-4790-9942-13c450ece8a1","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"3239f53b-81be-4d67-ae63-7ca0d6ce0f91","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"74c2daa1-efb0-4d3e-bd0c-8d11b297c92d","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"a4268f67-693d-4933-9e22-a77d68880a13","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"9f17896b-55b4-4627-8b6d-b01fdabdffe7","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"e45c5458-c148-4de7-a471-e2e3808d841e","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"ac44f25f-d7e5-46a3-a247-33e23e20e956","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"feb10296-b21e-4506-8d7e-567ed4dda994","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"ebba2e23-2c8d-4948-8cca-91ce71b3183d","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"ebdc80a9-26fc-4420-af7f-e576e4f12820","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"2cb68b65-34df-4322-911c-ead14627af13","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"0f2df6ef-74f6-42d5-a6ff-fb830bac6bc1","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"1feb74f5-775b-4809-80bb-1757ff6070f9","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"d8afaaaf-0174-4a14-8ba1-59043a985e91","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"7fd72fd2-933b-4816-81d1-b9e9d86b7c2c","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"9cf8d438-a37d-4dea-b0dd-e15d187e19ed","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"01561aea-2cd9-4883-a29a-1a7b9df2e432","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"ec2f2f29-d5a6-4fa0-aa61-353d48af9d1b","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"efb477ff-7d55-4163-a55e-a3c64415f6a4","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"c2302058-2cde-443c-a67f-e77cfd399c2e","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"a61a4e1a-eaea-4814-a424-e3c1ca6e3818","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"cb0d722f-fb48-45b5-a612-ff2df9b2e56e","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"50d0749d-1dde-4d8d-8963-e605f3a89b7a","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"900c820c-2909-4065-be81-72d3ca7733de","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"fac7dd69-11b1-42ee-8c1e-a41c97f4c3ee","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"9a357d48-c648-4ddb-8c79-2dc97bea6bc9","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"d5de4b91-714d-4c4c-8619-4b88fae85046","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"3741b662-b556-4859-8720-4c79fd48d48a","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"72db3e84-44c5-4d07-86b1-5f866a897e83","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"2a701ccf-5692-4ff9-9e44-62d6ec379397","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"d2087e5d-f90d-4827-a383-ff828bd65c69","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"bbf41a2c-98d3-4b54-82fb-a51c8441957e","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"477eb38f-0505-42fc-85ee-7456d81833e8","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"d9f37084-fcee-49d5-a192-8c41ee5615ed","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"067eb4be-9082-4153-8754-3bd0106a16ef","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"e943752e-d665-4133-ab1e-b6089d61b68a","tags":[{"product":null,"links":null,"id":"c3c0ef13-c7a9-4649-9fcb-23b3abec175d","name":"New","color":"Red","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]},{"id":"d573ae98-998d-4070-b089-620789e0738b","tags":[{"product":null,"links":null,"id":"2f377cfe-f512-431a-895b-f89af32041ce","name":"Upd","color":"Blue","productId":"c15646e4-63d8-4965-8d62-7549a2986e99"}]}]
        
(Showing Draft Content)

Worksheet Data Range

In SpreadJS, the data range feature lets you define and manage specific worksheet areas within the sheet’s axis system. It is particularly useful for displaying and interacting with complex data structures. It transforms the range cells' coordinate row and col between the sheet axis and the data range axis, providing the transformation for the user to focus on the business logic instead of manual coordinate handling.

The data range abstracts the storage and style storage from the internal worksheet to a user-defined interface. This allows the user to render their specialized data structured directly into the worksheet with all the normal worksheet rendering and interactions. For example, the pivot table is a special data store that is designed for data analysis, and it uses the data range to render its data and styles into the worksheet. This allows users to design custom solutions similar to pivot tables, such as Analytical reports, Financial reports, and Virtual server data views. By retrieving and aggregating data efficiently and rendering it using data range, users can avoid manually writing data to worksheet cells, which improves performance and usability.

Note: Data ranges should not intersect and must have unique names.

Key Features

  • Data Management: Defines logical boundaries within large datasets for targeted operations like visualization or analysis.

  • Customizable Data Display: Supports styling, merging, and conditional formatting for enhanced readability.

  • Dynamic Data Interaction: Real-time updates via event-driven hooks, sticky rows, and JSON serialization.

  • Improved User Experience: Features like sticky headers, alternating row styles, and keyboard navigation optimize usability.

  • Data Range IO: Export Data Ranges to JSON or Excel formats, maintaining consistent data representation.

Steps to Use a Data Range

Following the steps below, you can use a data range in the worksheet:

  1. Create a custom data provider by implementing the IDataProvider interface.

  2. Select a target range in the worksheet.

  3. Add the data range to the worksheet using the Data Range Manager.

Setting Up a Data Provider

A data provider is a user-defined instance. You can use the GC.Spread.Sheets.DataRange.IDataProvider interface for setting values, getting values, undo changes, and also customizing cell values using the data provider.

Setting Values

The reading and writing of cell values ​​in the data range are controlled by the data provider and you can use this ability to connect your data source conveniently. Use the getValue method to fetch the values when the sheet is rendering the cells in the data range. Similarly, the setValue method lets you assign values to cells within the data range.

Here is a sample of the customer data provider to take values with the data source.

 class CustomerDataProvider {
     // Values
     dataSource = [
         ["ID", "Name", "Age"],
         ["1", "Mike", "18"],
         ["2", "Joe", "19"],
         ["3", "Nick", "30"],
         ["4", "Sam", "26"]
     ]
     getValue(row, col) {
         return this.dataSource[row][col];
     }
     setValue(row, col, value) {
         this.dataSource[row][col] = value;
         return true;
     }
 }

However, if you want to undo/redo the changes done then you need to record the change in the changes parameter and then implement the undo method in your data provider using changes parameter.

   class CustomerDataProvider {
       // Values
       dataSource = [
           ["ID", "Name", "Age"],
           ["1", "Mike", "18"],
           ["2", "Joe", "19"],
           ["3", "Nick", "30"],
           ["4", "Sam", "26"]
       ]
       getValue(row, col) {
           return this.dataSource[row][col];
       }
       setValue(row, col, value, changes) {
           var oldValue = this.getValue(row, col);
           if (changes) {
               // create a change object with necessary informations for recovering state when undo
               var change = {
                   row: row,
                   col: col,
                   oldValue: oldValue,
                   type: "value" // mark the change with some key, then convenient for you to identify when undoing
               };
               changes.push(change);
           }
           this.dataSource[row][col] = value;
           return true;
       }
       undo(change) {
           if (change.type === "value") { // marked in setValue method
               var row = change.row;
               var col = change.col;
               var oldValue = change.oldValue;
               this.setValue(row, col, oldValue);
           }
       }
   }

Styling in Data Range

Using the getStyle method, you can customize the appearance of data ranges, such as table headers and body styles, alternating row styles, and so on. You can also use the GC.Spread.Sheet.Style class to use public style properties in the data provider, such as formatter, if required.

 class CustomerDataProvider {
     //  Styles
     headerRowCount = 1;
     styles = {
         header: () => {
             var style = new GC.Spread.Sheets.Style();
             style.backColor = "#217346";
             style.foreColor = "white";
             return style;
         },
         body: () => {
             var style = new GC.Spread.Sheets.Style();
             style.foreColor = "#217346";
             style.backColor = "lightgray";
             return style;
         }
     }

     step = 2;
     alternatingRowStyle = () => {
         var style = new GC.Spread.Sheets.Style();
         style.backColor = "#EEEEEE";
         return style;
     }
     getStyle(row, col) {
         // when row index is at the row header area
         if (row < this.headerRowCount) {
             return this.styles.header();
         }

         // Alternating Row Styles
         if (row % this.step === 0) {
             return this.alternatingRowStyle();
         } else {
             return this.styles.body();
         }
     }
 }

Conditional Formatting

You can also apply conditional formatting to a column of a data range using the applyColumnIndex property to enhance the readability and interpretability of data.

class CustomerDataProvider {
    // Conditional Formatting
    headerRowCount = 2;
    applyColumnIndex = 2; // the applied conditional format column index
    condition = (value) => value > 18;
    highlightStyle = () => {
        var style = new GC.Spread.Sheets.Style();
        style.foreColor = "red";
        style.cellPadding = "10 0 0 0";
        style.watermark = "ADULT";
        style.labelOptions = { visibility: 0, foreColor: "#CCCCCC", font: '10px Arial' };
        style.vAlign = GC.Spread.Sheets.VerticalAlign.center;
        return style;
    }
    normalStyle = () => {
        var style = new GC.Spread.Sheets.Style();
        style.vAlign = GC.Spread.Sheets.VerticalAlign.center;
        return style;
    }
    getStyle(row, col) {
        if (row < this.headerRowCount) {
            var style = new GC.Spread.Sheets.Style();
            style.backColor = "#217346";
            style.foreColor = "white";
            return style;
        }
        if (row >= this.headerRowCount) {
            // if match the condition
            if (col === this.applyColumnIndex && this.condition(this.getValue(row, col))) {
                return this.highlightStyle();
            }
            return this.normalStyle();
        }
    }
}

Spanning Cells

You can create multi-row or multi-column headers by using the getSpans method in your data provider.

class CustomerDataProvider{
    headerRowCount = 2;

    // Spans
    spans = [new GC.Spread.Sheets.Range(0, 0, 2, 1), new GC.Spread.Sheets.Range(0, 1, 1, 2)]
    getSpans(row, col, rowCount, colCount) {
        const spans = [];
        for (let span of this.spans) {
            if (span.intersect(row, col, rowCount, colCount)) {
                spans.push(span);
            }
        }
        return spans;
    }
}

Hooks and Events

The table below displays different hook actions and their return parameters. You can implement them in your data provider as per your requirements.

Hooks

Input Params

Return

onRowChange

row: number;

rowCount: number;

changeType: "add" | "delete";

changes: any[];


onColumnChange

col: number;

colCount: number;

changeType: "add" | "delete";

changes: any[];


onCopy

name: string;

{

name: string,

dataProvider: GC.Spread.Sheet.DataRange.IDataProvider | boolean;

}

If the value is false, it prevents copying the data range. By default, is false.

onClear

row: number;

col: number;

rowCount: number;

colCount: number;

changes: any[];

If the value is false, it prevents clear the data range. By default, is false.

This hook will be executed when clear content.

onDestory


This hook will be executed when the data range is removing.

onMouseDown

onMouseMove

onMouseUp

onContextMenu

onDoubleClick

row: number;

col: number;

e: MouseEvent;

boolean

true means there is already a corresponding action executed by the data provider, so prevents the next possible sheet actions.

onMouseWheel

deltaX: number;

deltaY: number;

e: MouseEvent;

boolean

true means that there is already a corresponding action executed by the data provider, so prevents the next possible sheet actions.

onKeyDown

onKeyUp

row: number;

col: number;

e: KeyboardEvent;

boolean

true means that there is already a corresponding action executed by the data provider, so prevents the next possible sheet actions.

toJSON


{

typeName: string;

[prop: string]: any;

}

Ensure that the typeName is same as your data provider class name if you want to deserialize it.

fromJSON

{

typeName: string;

[prop: string]: any;

}


Using Data Range Manager

The sheet.dataRanges property help manage multiple data ranges within a worksheet. You can perform the tasks mentioned in the sections below.

To add a new data range, with a name, data provider instance, and range, use the add method of dataRanges class.

sheet.dataRanges.add(
  "DataRangeName",
  CustomDataProvider,
  new GC.Spread.Sheets.Range(2, 2, 4, 4)
);

To remove a data range by its data range name, use the remove method of dataRanges class.

sheet.dataRanges.remove("DataRangeName");

To clear all the data ranges in the sheet, use the clear method of the dataRanges class.

sheet.dataRanges.clear();

To get a data range by its data range name, use the get method of the dataRanges class which takes the name of the data range as its parameter.

var dataRange = sheet.dataRanges.get("DataRangeName");

To get all the data ranges in the sheet, use the all method of the dataRanges class.

var dataRanges = sheet.dataRanges.all();

After your data source is changed, you can repaint and change the data range size and position, as per your requirements.

To repaint the data range area itself, use the repaint method.

dataRange.repaint();

To change the size of data range, you can pass the new rowCount and colCount in range method

var oldRange = dataRange.range();
dataRange.range(oldRange.row, oldRange.col, oldRange.rowCount + 1, oldRange.colCount + 1);

To change the position of the data range, you can pass the new row and colindex in the range method.

var oldRange = dataRange.range();
dataRange.range(oldRange.row + 1, oldRange.col + 1, oldRange.rowCount, oldRange.colCount);

Managing Data Range Options

You can make the data range top rows stick as the first visible row in the sheet, and the sticky rows count can be defined using sticky property and it can be changed later. Use the IDataRangeOptions interface to configure additional options like sticky rows.

sheet.dataRanges.add("DataRangeName", CustomDataProvider, new GC.Spread.Sheets.Range(2, 2, 4, 4), {
  sticky: { top: 2 }
});

Exporting Data Ranges

SpreadJS allows exporting data ranges to JSON, SJS, and Excel formats, ensuring a consistent presentation of the data. Following are the basic considerations for exporting data ranges.

JSON Format

Custom data provider classes cannot be serialized directly. Therefore, you must define a typeName with a string value that matches the same class name in the data provider. Ensure that your data provider class is accessible in the global instance, like window, so that the corresponding custom data provider class can be located during deserialization.

class CustomDataProvider {
  constructor () {
    this.typeName = "CustomDataProvider";
  }
}
window.CustomDataProvider = CustomDataProvider;

SJS Format

While exporting data ranges to SpreadJS format for use in SpreadJS applications, all exported JSON data will be stored in a lossless format.

Excel Format

Since Excel does not support data ranges, these ranges are exported as standard cells, including their values and styles.

Data Range Policies

Here are some important policies to keep in mind when working with data ranges in SpreadJS.

  • Row and column index must be between 0 and the total number of rows and columns in the sheet.

  • There are no limits on the number of rows and columns, but any data range areas outside the worksheet will be ignored.

  • All input parameters for the data provider hooks are based on the data range axes, not the sheet axes (e.g., row and column).

  • The data range will be moved when rows or columns are inserted or deleted before it and no action will be taken on the data range when rows or columns are inserted or deleted outside of the data range.

  • When the clear range contains the full data range, the data range will be removed.

  • The sort options in the Filter dialog and context menu will be hidden when the current context is a data range.

  • If there is no toJSON hook implemented in the data provider, a default JSON data output will be generated using the custom data provider's typeName property.

  • When using the fromJSON, if there is no matching data provider, the corresponding data range will not be created.