gridjs-spreadsheet 26.7.0 → 26.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/readme.md CHANGED
@@ -1,14 +1,51 @@
1
- # gridjs-spreadsheet
1
+ # gridjs-spreadsheet | Lightweight Online Excel Editor & Web Spreadsheet API
2
2
 
3
- `gridjs-spreadsheet` is the browser-side spreadsheet UI for Aspose.Cells GridJs. The package includes the core GridJS runtime, TypeScript declarations, and adapters for React, Vue 3, and Angular.
3
+ > **GridJs-Spreadsheet** is a high-performance, lightweight JavaScript library for building online Excel editors and web-based spreadsheet applications. It provides seamless Excel viewing, editing, and cross-platform deployment with an easy-to-use API.
4
+ >
5
+ > **Now with first-class support for Vue 3, React, and Angular.**
6
+
7
+ ## Why Choose GridJs-Spreadsheet?
8
+
9
+ Whether you are building a collaborative document platform, a data management tool, or an Excel viewer for your web app, GridJs-Spreadsheet offers a comprehensive solution with a tiny footprint.
10
+
11
+ - Rich Excel-compatible editing experience — formulas, formatting, charts, images, form controls
12
+ - First-class framework wrappers for **React**, **Vue 3**, and **Angular** — drop-in components with zero boilerplate
13
+ - Full TypeScript declarations for IntelliSense and type safety
14
+ - Server-backed or client-only mode — works with any backend (.NET, Java, Python, Node.js)
15
+ - 17+ UI languages out of the box
16
+ - MIT licensed — free for commercial and open-source projects
17
+
18
+ ## Preview
19
+
20
+ <img alt="GridJS spreadsheet preview" src="https://unpkg.com/gridjs-spreadsheet@26.7.0/preview.gif">
21
+
22
+ Quick online demo: <https://products.aspose.app/cells/editor>
23
+
24
+ ## Table of Contents
25
+
26
+ - [Installation](#installation)
27
+ - [Package Exports](#package-exports)
28
+ - [Usage](#usage)
29
+ - [Vanilla JavaScript (npm)](#vanilla-javascript-with-npm)
30
+ - [Vanilla HTML (CDN)](#vanilla-html-with-script-tags)
31
+ - [React](#react)
32
+ - [Vue 3](#vue-3)
33
+ - [Angular](#angular)
34
+ - [Framework Adapter API](#framework-adapter-api)
35
+ - [Core API](#core-api)
36
+ - [Features](#features)
37
+ - [Backend Endpoints](#backend-endpoints)
38
+ - [Example Project](#example-project)
39
+ - [Browser Support](#browser-support)
40
+ - [Version History](#version-history)
41
+ - [Resources](#resources)
42
+ - [License](#license)
4
43
 
5
- Version 26.7.0 also publishes a complete Java example containing five independent frontend demos:
44
+ ## About
6
45
 
7
- - React
8
- - Vue 3
9
- - Angular
10
- - Vanilla HTML using npm imports
11
- - Vanilla HTML using CDN script tags
46
+ GridJs-Spreadsheet allows you to view and edit spreadsheet files directly in the browser. It is developed based on [x-spreadsheet](https://github.com/myliang/x-spreadsheet) and extended with enterprise-grade features including chart rendering, form controls, data redaction, multi-sheet support, and server-side integration APIs.
47
+
48
+ The package includes the core GridJS runtime, TypeScript declarations, and ready-to-use adapters for **React**, **Vue 3**, and **Angular**.
12
49
 
13
50
  ## Installation
14
51
 
@@ -16,20 +53,33 @@ Version 26.7.0 also publishes a complete Java example containing five independen
16
53
  npm install gridjs-spreadsheet
17
54
  ```
18
55
 
19
- The framework packages are optional peer dependencies. Install only the framework used by your application.
56
+ The framework packages are optional peer dependencies install only the framework used by your application:
57
+
58
+ ```bash
59
+ # install for React
60
+ npm install react react-dom
61
+
62
+ # install for Vue 3
63
+ npm install vue
64
+
65
+ # install for Angular
66
+ npm install @angular/core @angular/common
67
+ ```
20
68
 
21
- ## Package exports
69
+ ## Package Exports
22
70
 
23
71
  | Usage | Import |
24
72
  | --- | --- |
25
73
  | Core runtime | `gridjs-spreadsheet` |
26
74
  | Styles | `gridjs-spreadsheet/xspreadsheet.css` |
27
- | React | `gridjs-spreadsheet/react` |
28
- | Vue 3 | `gridjs-spreadsheet/vue` |
29
- | Angular | `gridjs-spreadsheet/angular` |
75
+ | React component | `gridjs-spreadsheet/react` |
76
+ | Vue 3 component | `gridjs-spreadsheet/vue` |
77
+ | Angular component | `gridjs-spreadsheet/angular` |
30
78
  | Shared adapter | `gridjs-spreadsheet/shared` |
31
79
 
32
- ## Vanilla JavaScript with npm
80
+ ## Usage
81
+
82
+ ### Vanilla JavaScript with npm
33
83
 
34
84
  ```html
35
85
  <div id="gridjs-demo"></div>
@@ -46,6 +96,7 @@ const spreadsheet = new Spreadsheet('#gridjs-demo', {
46
96
  updateMode: 'server',
47
97
  updateUrl: '/GridJs2/UpdateCell',
48
98
  mode: 'edit',
99
+ // Support 17+ languages: en, cn, es, pt, de, ru, nl, ar, fr, id, it, ja, ko, th, tr, vi, cht
49
100
  local: 'en',
50
101
  });
51
102
 
@@ -54,7 +105,7 @@ spreadsheet.setUniqueId(workbookJson.uniqueid);
54
105
  spreadsheet.setFileName(workbookJson.filename);
55
106
  ```
56
107
 
57
- ## Vanilla HTML with script tags
108
+ ### Vanilla HTML with script tags
58
109
 
59
110
  ```html
60
111
  <link
@@ -63,7 +114,7 @@ spreadsheet.setFileName(workbookJson.filename);
63
114
  >
64
115
 
65
116
  <script src="https://unpkg.com/jszip@3.10.1/dist/jszip.min.js"></script>
66
- <script src="https://unpkg.com/gridjs-spreadsheet@26.7.0/xspreadsheet.js"></script>
117
+ <script src="https://unpkg.com/gridjs-spreadsheet/xspreadsheet.js"></script>
67
118
 
68
119
  <div id="gridjs-demo"></div>
69
120
 
@@ -79,7 +130,7 @@ spreadsheet.setFileName(workbookJson.filename);
79
130
  </script>
80
131
  ```
81
132
 
82
- ## React
133
+ ### React
83
134
 
84
135
  ```jsx
85
136
  import { useState } from 'react';
@@ -97,13 +148,15 @@ export default function App() {
97
148
  locale="en"
98
149
  height="600px"
99
150
  onReady={(instance, adapter) => console.log('ready', instance, adapter)}
151
+ onChange={(...args) => console.log('changed', args)}
152
+ onCellSelected={(...args) => console.log('cell selected', args)}
100
153
  onError={(error) => console.error(error)}
101
154
  />
102
155
  );
103
156
  }
104
157
  ```
105
158
 
106
- ## Vue 3
159
+ ### Vue 3
107
160
 
108
161
  ```vue
109
162
  <template>
@@ -113,6 +166,8 @@ export default function App() {
113
166
  locale="en"
114
167
  height="600px"
115
168
  @ready="onReady"
169
+ @change="onChange"
170
+ @cell-selected="onCellSelected"
116
171
  @error="onError"
117
172
  />
118
173
  </template>
@@ -124,11 +179,13 @@ import 'gridjs-spreadsheet/xspreadsheet.css';
124
179
 
125
180
  const sheetData = ref(null);
126
181
  const onReady = (instance, adapter) => console.log('ready', instance, adapter);
182
+ const onChange = (...args) => console.log('changed', args);
183
+ const onCellSelected = (...args) => console.log('cell selected', args);
127
184
  const onError = error => console.error(error);
128
185
  </script>
129
186
  ```
130
187
 
131
- ## Angular
188
+ ### Angular
132
189
 
133
190
  ```ts
134
191
  import { Component } from '@angular/core';
@@ -145,6 +202,8 @@ import { GridJsSpreadsheetComponent } from 'gridjs-spreadsheet/angular';
145
202
  locale="en"
146
203
  height="600px"
147
204
  (ready)="onReady($event)"
205
+ (change)="onChange($event)"
206
+ (cellSelected)="onCellSelected($event)"
148
207
  (error)="onError($event)"
149
208
  />
150
209
  `,
@@ -152,6 +211,8 @@ import { GridJsSpreadsheetComponent } from 'gridjs-spreadsheet/angular';
152
211
  export class AppComponent {
153
212
  sheetData: any = null;
154
213
  onReady(event: any) { console.log('ready', event); }
214
+ onChange(args: any[]) { console.log('changed', args); }
215
+ onCellSelected(args: any[]) { console.log('cell selected', args); }
155
216
  onError(error: any) { console.error(error); }
156
217
  }
157
218
  ```
@@ -165,77 +226,376 @@ Add the GridJS stylesheet to `angular.json`:
165
226
  ]
166
227
  ```
167
228
 
168
- ## Framework adapter inputs
229
+ ## Framework Adapter API
169
230
 
170
231
  The React, Vue, and Angular adapters share the same configuration model:
171
232
 
172
- | Option | Description |
173
- | --- | --- |
174
- | `apiBase` | Optional prefix for GridJS backend endpoints |
175
- | `data` | Workbook JSON returned by the GridJS backend |
176
- | `loader` | Function that asynchronously returns workbook JSON |
177
- | `mode` | `edit` or `read` |
178
- | `locale` | GridJS UI locale |
179
- | `token` | Optional authorization token |
180
- | `height` | Component height |
181
- | `showToolbar` | Show or hide the toolbar |
182
- | `showContextmenu` | Show or hide the context menu |
233
+ | Option | Type | Default | Description |
234
+ | --- | --- | --- | --- |
235
+ | `apiBase` | `string` | `''` | Prefix for GridJS backend endpoints |
236
+ | `data` | `object` | `null` | Workbook JSON returned by the GridJS backend |
237
+ | `loader` | `function` | `null` | Async function that returns workbook JSON |
238
+ | `mode` | `'edit' \| 'read'` | `'edit'` | Editing mode |
239
+ | `locale` | `string` | `'en'` | UI language locale |
240
+ | `token` | `string` | `''` | Authorization token for server requests |
241
+ | `height` | `string \| number` | `'calc(100vh - 96px)'` | Component height |
242
+ | `showToolbar` | `boolean` | `true` | Show or hide the toolbar |
243
+ | `showContextmenu` | `boolean` | `true` | Show or hide the context menu |
183
244
 
184
- The adapters expose ready, change, error, cell selection, cell editing, sheet selection, and sheet loading events using each framework's normal event conventions.
245
+ **Events:** All adapters expose `ready`, `change`, `error`, `cellSelected`, `cellEdited`, `sheetSelected`, and `sheetLoaded` events using each framework's normal event conventions.
185
246
 
186
- GridJS requires a browser DOM. Mount the adapters on the client when using an SSR framework.
247
+ > **Note:** GridJS requires a browser DOM. When using SSR frameworks (Next.js, Nuxt, Angular Universal), mount the adapters on the client side only.
187
248
 
188
- ## Java example included in the package
249
+ ## Core API
189
250
 
190
- The published package contains `example/`, including a Spring Boot backend and all five frontend projects. Copy it to a writable directory before running it:
251
+ The core `Spreadsheet` class provides a rich JavaScript API:
191
252
 
192
- ```bash
193
- npm install gridjs-spreadsheet
194
- cp -R node_modules/gridjs-spreadsheet/example ./gridjs-example
195
- cd gridjs-example
253
+ ```js
254
+ const xs = new Spreadsheet('#container', options);
255
+
256
+ // Load data
257
+ xs.loadData(jsonData);
258
+
259
+ // Bind events
260
+ xs.on('cell-selected', (cell, ri, ci) => { });
261
+ xs.on('cells-selected', (cell, { sri, sci, eri, eci }) => { });
262
+ xs.on('cell-edited', (text, ri, ci) => { });
263
+ xs.on('object-selected', (obj) => { });
264
+ xs.on('cells-updated', (name, cells) => { });
265
+ xs.on('rows-inserted', (ri, n) => { });
266
+ xs.on('columns-inserted', (ci, n) => { });
267
+ xs.on('rows-deleted', (ri, n) => { });
268
+ xs.on('columns-deleted', (ci, n) => { });
269
+ xs.on('cells-deleted', (range) => { });
270
+
271
+ // Cell operations
272
+ xs.cellText(5, 5, 'Hello');
273
+ xs.cell(ri, ci);
274
+ xs.cellStyle(ri, ci);
275
+
276
+ // Sheet operations
277
+ xs.setActiveSheet(index);
278
+ xs.setActiveSheetByName('Sheet2');
279
+ xs.setActiveCell(rowIndex, colIndex);
280
+ xs.getData();
281
+
282
+ // Server integration
283
+ xs.setUniqueId('workbook-id');
284
+ xs.setFileName('report.xlsx');
285
+ xs.refreshToken(token);
286
+
287
+ // Cleanup
288
+ xs.destroy();
196
289
  ```
197
290
 
198
- Start the Java backend in the first terminal:
291
+ Full API documentation: [API Reference](https://docs.aspose.com/cells/net/aspose-cells-gridjs/how-to-use-gridjs-client-api/)
199
292
 
200
- ```bash
201
- ./mvnw spring-boot:run -Dmaven.test.skip=true
293
+ ### Default Options
294
+
295
+ ```js
296
+ {
297
+ mode: 'edit', // 'edit' | 'read'
298
+ showToolbar: true,
299
+ showGrid: true,
300
+ showContextmenu: true,
301
+ view: {
302
+ height: () => document.documentElement.clientHeight,
303
+ width: () => document.documentElement.clientWidth,
304
+ },
305
+ row: { len: 100, height: 25 },
306
+ col: { len: 26, width: 100, indexWidth: 60, minWidth: 60 },
307
+ style: {
308
+ bgcolor: '#ffffff',
309
+ align: 'left',
310
+ valign: 'middle',
311
+ textwrap: false,
312
+ color: '#0a0a0a',
313
+ font: { name: 'Helvetica', size: 10, bold: false, italic: false },
314
+ },
315
+ }
202
316
  ```
203
317
 
204
- Start a frontend in a second terminal, for example React:
318
+ ## Features
319
+
320
+ ### Rich Editing & Formatting
321
+ - Font / Font size / Bold / Italic / Underline / Strikethrough
322
+ - Text color / Alignment / Text wrapping
323
+ - Fill color / Highlight
324
+ - Number format / Rich text support
325
+ - Borders / Conditional formatting
326
+ - Format painter / Clear format
327
+
328
+ ### Data Management & Analysis
329
+ - Full formula support
330
+ - Filter / Sort rows and columns
331
+ - Data validations (including multi-select lists)
332
+ - Copy / Cut / Paste / Autofill — including from MS Excel
333
+ - Merge cells / Freeze panes
334
+ - Insert / Delete rows and columns
335
+ - Resize row height / column width
336
+ - Zoom in / out
337
+ - Search and replace
338
+ - Statistics information in the status bar
339
+
340
+ ### Visuals & Objects
341
+ - Charts rendering (bar, line, pie, area, and more)
342
+ - Conditional formatting icons
343
+ - Shape / Image resize, rotate, and position adjustment
344
+ - Insert / Delete / Copy shapes and images
345
+ - Form controls / ActiveX controls display
346
+ - Insert / Delete form controls
347
+ - Two-color gradient fill effects
348
+
349
+ ### Security & Advanced Tools
350
+ - Data redaction — burn sensitive data permanently
351
+ - Comments — add / edit / delete
352
+ - Hyperlinks — add / delete
353
+ - Print support
354
+ - Localization — 17+ UI languages
355
+ - Mobile responsive compatibility
356
+ - Custom toolbar buttons
357
+ - Lazy loading for large workbooks
358
+
359
+ ## Backend Endpoints
360
+
361
+ The adapters use the standard Aspose.Cells GridJs endpoints:
362
+
363
+ - `/GridJs2/UpdateCell` — cell update
364
+ - `/GridJs2/ImageUrl` — image retrieval
365
+ - `/GridJs2/AddImage` — upload local image
366
+ - `/GridJs2/AddImageByURL` — upload image by URL
367
+ - `/GridJs2/CopyImage` — copy image
368
+ - `/GridJs2/Download` — file download
369
+ - `/GridJs2/Ole` — OLE object download
370
+ - `/GridJs2/LazyLoadingStreamJson` — lazy loading
371
+
372
+ ## Example Project
373
+
374
+ The package includes a complete `example/` directory with a Spring Boot backend and five independent frontend demos (React, Vue 3, Angular, Vanilla npm, Vanilla CDN).
205
375
 
206
376
  ```bash
207
- cd react-gridjs
208
- npm install
209
- npm run dev
377
+ cp -R node_modules/gridjs-spreadsheet/example ./gridjs-example
378
+ cd gridjs-example
379
+ ./mvnw spring-boot:run -Dmaven.test.skip=true
210
380
  ```
211
381
 
212
382
  See [`example/README.md`](example/README.md) for all framework commands, ports, backend configuration, and troubleshooting.
213
383
 
214
- ## Backend endpoints
384
+ Additional demos for .NET, Java, and Python:
215
385
 
216
- The adapters use the standard Aspose.Cells GridJs endpoints, including:
386
+ - <https://github.com/aspose-cells/Aspose.Cells.Grid-for-.NET/tree/master/Examples_GridJs>
387
+ - <https://github.com/aspose-cells/Aspose.Cells.Grid-for-Java/tree/master/Examples.GridJs>
388
+ - <https://github.com/aspose-cells/Aspose.Cells.Grid-for-Python-via-.NET/tree/main/Examples.GridJs>
217
389
 
218
- - `/GridJs2/UpdateCell`
219
- - `/GridJs2/ImageUrl`
220
- - `/GridJs2/AddImage`
221
- - `/GridJs2/AddImageByURL`
222
- - `/GridJs2/CopyImage`
223
- - `/GridJs2/Download`
224
- - `/GridJs2/Ole`
225
- - `/GridJs2/LazyLoadingStreamJson`
390
+ ## Browser Support
226
391
 
227
- The example frontend development servers proxy `/GridJs2` and `/gridjsdemo` to the Java backend on port 8080.
392
+ Modern browsers Chrome, Firefox, Safari, Edge.
228
393
 
229
- ## Preview
394
+ ## Version History
230
395
 
231
- <img alt="GridJS spreadsheet preview" src="https://unpkg.com/gridjs-spreadsheet@26.7.0/preview.gif">
396
+ <details>
397
+ <summary><strong>v26.8</strong> — Support redaction for entire sheet</summary>
398
+
399
+ - Support redaction for entire sheet
400
+ - Support redaction for sheet name
401
+ </details>
402
+
403
+ <details>
404
+ <summary><strong>v26.7.1</strong> — Improve performance for redaction</summary>
405
+
406
+ - Improve performance for redaction
407
+ </details>
408
+
409
+ <details>
410
+ <summary><strong>v26.7</strong> — Fix issue for filter in merge area</summary>
411
+
412
+ - Fix issue for filter in merge area
413
+ </details>
414
+
415
+ <details>
416
+ <summary><strong>v26.6</strong> — Improve redaction</summary>
417
+
418
+ - Improve redaction feature
419
+ - Fix redaction font issue
420
+ - Fix redaction transparent view issue
421
+ </details>
422
+
423
+ <details>
424
+ <summary><strong>v26.5</strong> — Custom toolbar buttons, date picker, filter, print</summary>
425
+
426
+ - Support add custom buttons in toolbar
427
+ - Improve date picker
428
+ - Improve filter display
429
+ - Improve print
430
+ - Improve scroll in zoom
431
+ </details>
432
+
433
+ <details>
434
+ <summary><strong>v26.4</strong> — Redaction, shape lock, zoom snap</summary>
435
+
436
+ - Add redaction features
437
+ - Fix paste scroll issue
438
+ - Support shape lock
439
+ - Support snap to cell area in zoom in/out
440
+ - Add boundary check for redaction
441
+ </details>
442
+
443
+ <details>
444
+ <summary><strong>v26.3</strong> — Improve filter/validations/charts</summary>
445
+
446
+ - Improve filter/validations/charts
447
+ </details>
448
+
449
+ <details>
450
+ <summary><strong>v26.2</strong> — Performance improvement for large rows</summary>
451
+
452
+ - Improve client performance for large rows
453
+ </details>
454
+
455
+ <details>
456
+ <summary><strong>v26.1</strong> — Rotated text highlight, more charts</summary>
457
+
458
+ - Support highlight text with rotation
459
+ - Support more charts rendering in client
460
+ </details>
461
+
462
+ <details>
463
+ <summary><strong>v25.12</strong> — Sort by color, multi-select validation</summary>
464
+
465
+ - Support sort by cell color/font color
466
+ - Support add multiple selection validation list
467
+ </details>
468
+
469
+ <details>
470
+ <summary><strong>v25.11</strong> — Chart fill colors, color picker</summary>
471
+
472
+ - Support fill color settings for charts
473
+ - Support 'Fill Color' and 'Font Color' button dropdown selection and click to fill
474
+ </details>
475
+
476
+ <details>
477
+ <summary><strong>v25.10</strong> — Custom toast, modal CSS</summary>
478
+
479
+ - Support APIs to set customToast
480
+ - Support CSS identify for model window
481
+ </details>
482
+
483
+ <details>
484
+ <summary><strong>v25.9</strong> — Pattern fill style</summary>
485
+
486
+ - Support to render pattern style for cell
487
+ </details>
488
+
489
+ <details>
490
+ <summary><strong>v25.8</strong> — Auto text wrap, textbox font</summary>
491
+
492
+ - Support automatic text wrapping
493
+ - Support API to apply font setting in textbox control
494
+ </details>
495
+
496
+ <details>
497
+ <summary><strong>v25.7</strong> — Editable range, worksheet/comment/range APIs</summary>
498
+
499
+ - Support APIs to enable/disable editable range
500
+ - Support APIs to add/modify/delete worksheet
501
+ - Support APIs to add/modify/delete comment
502
+ - Support APIs to set attribute for range of cells
503
+ - Support APIs to delete for range of cells
504
+ </details>
505
+
506
+ <details>
507
+ <summary><strong>v25.6</strong> — Resize/hide rows and columns</summary>
508
+
509
+ - Support APIs for resize rows/columns
510
+ - Support APIs for hide/unhide rows/columns
511
+ </details>
512
+
513
+ <details>
514
+ <summary><strong>v25.5</strong> — Polish locale, row/column APIs</summary>
515
+
516
+ - Add support for Polish menus
517
+ - Support APIs for insert/delete rows/columns
518
+ </details>
519
+
520
+ <details>
521
+ <summary><strong>v25.4</strong> — Status bar statistics</summary>
522
+
523
+ - Support show statistics information in the lower right corner when cells are selected
524
+ </details>
525
+
526
+ <details>
527
+ <summary><strong>v25.3</strong> — Shortcut keys, multi-area paste</summary>
528
+
529
+ - Support more shortcut keys
530
+ - Support pasting the content copied from Excel to multiple target areas
531
+ </details>
532
+
533
+ <details>
534
+ <summary><strong>v25.2</strong> — Excel paste, auto operations</summary>
535
+
536
+ - Support copy/paste from MS-Excel
537
+ - Enhancement for automatic operations — extending blank row/column, page scrolling, etc.
538
+ </details>
539
+
540
+ <details>
541
+ <summary><strong>v25.1</strong> — Excel copy/paste</summary>
542
+
543
+ - Support copy/paste from MS-Excel
544
+ </details>
545
+
546
+ <details>
547
+ <summary><strong>v24.12</strong> — HTML nodes, multi-instance, row/column events</summary>
548
+
549
+ - Support API to show HTML nodes and interact with HTML nodes at specified cell positions
550
+ - Support pre-check event for row/column delete/insert operations
551
+ - Support row/column insert/delete events for client APIs
552
+ - Support events for updating cells
553
+ - Support multiple instances on one page
554
+ </details>
555
+
556
+ <details>
557
+ <summary><strong>v24.11</strong> — Rich text display</summary>
558
+
559
+ - Improve the display of rich text cell values
560
+ </details>
561
+
562
+ <details>
563
+ <summary><strong>v24.10</strong> — Show formulas</summary>
564
+
565
+ - Support a view option to show formulas
566
+ </details>
567
+
568
+ <details>
569
+ <summary><strong>v24.9.1</strong> — Initial release</summary>
570
+
571
+ - Fix bug that fail to insert column in the new added worksheet
572
+ - Fix bug that fail to rename worksheet
573
+ - Support lazy loading
574
+ </details>
232
575
 
233
576
  ## Resources
234
577
 
235
- - [Aspose.Cells product page](https://products.aspose.com/cells/java/)
236
- - [Aspose.Cells GridJs documentation](https://docs.aspose.com/cells/java/aspose-cells-gridjs/)
237
- - [API reference](https://reference.aspose.com/cells/java/com.aspose.gridjs/)
238
- - [Free support forum](https://forum.aspose.com/c/cells)
578
+ ### Documentation
579
+ - [Developer's Guide — .NET / C#](https://docs.aspose.com/cells/net/aspose-cells-gridjs/)
580
+ - [Developer's Guide — Java](https://docs.aspose.com/cells/java/aspose-cells-gridjs/)
581
+ - [Developer's Guide — Python](https://docs.aspose.com/cells/python-net/aspose-cells-gridjs/)
582
+ - [Client API How-To](https://docs.aspose.com/cells/net/aspose-cells-gridjs/how-to-use-gridjs-client-api/)
583
+
584
+ ### Product Links
585
+ - [Aspose.Cells Product Page](https://products.aspose.com/cells)
586
+ - [GridJs Online Demo](https://products.aspose.app/cells/editor)
587
+ - [API Reference — .NET / C#](https://reference.aspose.com/cells/net/aspose.cells.gridjs/)
588
+ - [API Reference — Java](https://reference.aspose.com/cells/java/com.aspose.gridjs/)
589
+ - [API Reference — Python](https://reference.aspose.com/cells/python-net/aspose.cellsgridjs/)
590
+ - [Blog](https://blog.aspose.com/categories/aspose.cells-product-family/)
591
+
592
+ ### Source Code & Samples
593
+ - [.NET Examples](https://github.com/aspose-cells/Aspose.Cells.Grid-for-.NET/tree/main/Examples_GridJs)
594
+ - [Java Examples](https://github.com/aspose-cells/Aspose.Cells.Grid-for-Java/tree/master/Examples.GridJs)
595
+ - [Python Examples](https://github.com/aspose-cells/Aspose.Cells.Grid-for-Python-via-.NET/tree/main/Examples.GridJs)
596
+
597
+ ### Free Support
598
+ - [Aspose.Cells Forum](https://forum.aspose.com/c/cells) — ask questions, request features, report bugs
239
599
 
240
600
  ## License
241
601