gridjs-spreadsheet 26.6.2 → 26.7.1
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/angular.d.ts +67 -0
- package/angular.js +174 -0
- package/example/README.md +242 -41
- package/example/angular-gridjs/.nvmrc +1 -0
- package/example/angular-gridjs/angular.json +66 -0
- package/example/angular-gridjs/package.json +31 -0
- package/example/angular-gridjs/proxy.conf.json +12 -0
- package/example/angular-gridjs/src/app/api.ts +7 -0
- package/example/angular-gridjs/src/app/app.component.html +57 -0
- package/example/angular-gridjs/src/app/app.component.ts +153 -0
- package/example/angular-gridjs/src/app/routing.ts +52 -0
- package/example/angular-gridjs/src/favicon.ico +0 -0
- package/example/angular-gridjs/src/index.html +12 -0
- package/example/angular-gridjs/src/main.ts +7 -0
- package/example/angular-gridjs/src/styles.css +37 -0
- package/example/angular-gridjs/tsconfig.app.json +9 -0
- package/example/angular-gridjs/tsconfig.json +29 -0
- package/example/pom.xml +3 -3
- package/example/react-gridjs/index.html +12 -0
- package/example/react-gridjs/package.json +20 -0
- package/example/react-gridjs/src/App.jsx +188 -0
- package/example/react-gridjs/src/api.js +7 -0
- package/example/react-gridjs/src/main.jsx +9 -0
- package/example/react-gridjs/src/routing.js +51 -0
- package/example/react-gridjs/src/styles.css +37 -0
- package/example/react-gridjs/vite.config.js +16 -0
- package/example/src/main/java/com/aspose/gridjs/demo/controller/DataController.java +80 -2
- package/example/src/main/java/com/aspose/gridjs/demo/controller/GridJs2Controller.java +12 -0
- package/example/vanilla-gridjs/npm/index.html +29 -0
- package/example/vanilla-gridjs/npm/main.js +8 -0
- package/example/vanilla-gridjs/npm/package.json +16 -0
- package/example/vanilla-gridjs/npm/vite.config.js +11 -0
- package/example/vanilla-gridjs/script/index.html +32 -0
- package/example/vanilla-gridjs/script/main.js +9 -0
- package/example/vanilla-gridjs/script/package.json +12 -0
- package/example/vanilla-gridjs/script/vite.config.js +11 -0
- package/example/vanilla-gridjs/shared/demo-app.js +205 -0
- package/example/vanilla-gridjs/shared/styles.css +36 -0
- package/example/vue-gridjs/index.html +12 -0
- package/example/vue-gridjs/package.json +19 -0
- package/example/vue-gridjs/src/App.vue +199 -0
- package/example/vue-gridjs/src/api.js +7 -0
- package/example/vue-gridjs/src/main.js +9 -0
- package/example/vue-gridjs/src/routing.js +51 -0
- package/example/vue-gridjs/src/styles.css +37 -0
- package/example/vue-gridjs/vite.config.js +21 -0
- package/index.d.ts +58 -1
- package/index.js +1 -1
- package/package.json +170 -50
- package/react.d.ts +27 -0
- package/react.js +111 -0
- package/readme.md +470 -318
- package/shared.d.ts +66 -0
- package/shared.js +204 -0
- package/vue.d.ts +20 -0
- package/vue.js +125 -0
- package/xspreadsheet.css +7 -0
- package/xspreadsheet.js +3 -3
- package/example/.mvn/wrapper/maven-wrapper.properties +0 -18
- package/example/src/test/java/com/aspose/gridjs/demo/GridjsdemoApplicationTests.java +0 -1441
package/readme.md
CHANGED
|
@@ -1,443 +1,595 @@
|
|
|
1
1
|
# gridjs-spreadsheet | Lightweight Online Excel Editor & Web Spreadsheet API
|
|
2
|
-
|
|
2
|
+
|
|
3
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
|
|
4
19
|
|
|
5
|
-
|
|
20
|
+
<img alt="GridJS spreadsheet preview" src="https://unpkg.com/gridjs-spreadsheet@26.7.0/preview.gif">
|
|
6
21
|
|
|
7
|
-
|
|
22
|
+
Quick online demo: <https://products.aspose.app/cells/editor>
|
|
8
23
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- [
|
|
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)
|
|
12
36
|
- [Features](#features)
|
|
13
|
-
- [
|
|
14
|
-
- [
|
|
37
|
+
- [Backend Endpoints](#backend-endpoints)
|
|
38
|
+
- [Example Project](#example-project)
|
|
39
|
+
- [Browser Support](#browser-support)
|
|
40
|
+
- [Version History](#version-history)
|
|
41
|
+
- [Resources](#resources)
|
|
15
42
|
- [License](#license)
|
|
16
43
|
|
|
17
44
|
## About
|
|
18
45
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
this is developed based on https://github.com/myliang/x-spreadsheet
|
|
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.
|
|
22
47
|
|
|
23
|
-
|
|
48
|
+
The package includes the core GridJS runtime, TypeScript declarations, and ready-to-use adapters for **React**, **Vue 3**, and **Angular**.
|
|
24
49
|
|
|
25
|
-
##
|
|
50
|
+
## Installation
|
|
26
51
|
|
|
27
|
-
|
|
52
|
+
```bash
|
|
53
|
+
npm install gridjs-spreadsheet
|
|
54
|
+
```
|
|
28
55
|
|
|
56
|
+
The framework packages are optional peer dependencies — install only the framework used by your application:
|
|
29
57
|
|
|
30
|
-
|
|
58
|
+
```bash
|
|
59
|
+
# install for React
|
|
60
|
+
npm install react react-dom
|
|
31
61
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
## CDN
|
|
35
|
-
```html
|
|
36
|
-
<head>
|
|
37
|
-
<!-- other dependency start -->
|
|
38
|
-
<link rel="stylesheet" href="https://unpkg.com/bootstrap@5.2.3/dist/css/bootstrap.min.css">
|
|
39
|
-
<link rel="stylesheet" href="https://unpkg.com/jquery-ui@1.13.2/dist/themes/ui-lightness/jquery-ui.min.css">
|
|
40
|
-
<script src="https://unpkg.com/jquery@3.6.0/dist/jquery.min.js"></script>
|
|
41
|
-
<script src="https://unpkg.com/jquery-ui@1.13.2/dist/jquery-ui.min.js"></script>
|
|
42
|
-
<script src="https://unpkg.com/jszip@3.10.1/dist/jszip.min.js"></script>
|
|
43
|
-
<!-- other dependency end -->
|
|
44
|
-
<link rel="stylesheet" href="https://unpkg.com/gridjs-spreadsheet/xspreadsheet.css">
|
|
45
|
-
<script src="https://unpkg.com/gridjs-spreadsheet/xspreadsheet.js"></script>
|
|
62
|
+
# install for Vue 3
|
|
63
|
+
npm install vue
|
|
46
64
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
updateMode: 'server',
|
|
50
|
-
updateUrl: '/GridJs2/UpdateCell',
|
|
51
|
-
showToolbar: true,
|
|
52
|
-
//mode: 'edit' or 'read'
|
|
53
|
-
mode: 'read',
|
|
54
|
-
//support multiple language ,the locale is:en, cn, es, pt, de, ru, nl, ar, fr,id,it,ja, ko,th,tr,vi,cht
|
|
55
|
-
local: 'en',
|
|
56
|
-
};
|
|
57
|
-
const sheetstr="[{\"name\":\"Sheet1\",\"sheetid\":\"s0\",\"showGrid\":true,\"sprotected\":false,\"canselectlocked\":true,\"displayRight2Left\":false,\"canselectunlocked\":true,\"styles\":[{\"textwrap\":true,\"color\":\"#000000\",\"valign\":\"middle\",\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"italic\":false}},{\"textwrap\":false,\"color\":\"#000000\",\"valign\":\"middle\",\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"italic\":false}}],\"cols\":{\"0\":{\"width\":72},\"1\":{\"width\":72},\"2\":{\"width\":532},\"3\":{\"width\":72},\"4\":{\"width\":72},\"5\":{\"width\":72},\"6\":{\"width\":72},\"7\":{\"width\":72},\"8\":{\"width\":72},\"9\":{\"width\":72},\"10\":{\"width\":72},\"11\":{\"width\":72},\"12\":{\"width\":72},\"13\":{\"width\":72},\"14\":{\"width\":72},\"15\":{\"width\":72},\"len\":16},\"rows\":{\"3\":{\"height\":122,\"cells\":{\"2\":{\"text\":\"FFF呜呜呜\\n呜我 我我我我\\nnice wwwwww\\nexample work 测的的的的的的的到\\n到手 一级 一季报 击败发发发发发发发发发发发\",\"style\":0,\"rtxt\":[{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#000000\",\"italic\":false},\"txt\":\"F\"},{\"font\":{\"name\":\"arial\",\"size\":18,\"bold\":false,\"color\":\"#953735\",\"italic\":false},\"txt\":\"FF呜\"},{\"font\":{\"name\":\"arial\",\"size\":18,\"bold\":false,\"color\":\"#953735\",\"underline\":\"single\",\"italic\":false},\"txt\":\"呜\"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#000000\",\"underline\":\"single\",\"italic\":false},\"txt\":\"呜\"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#000000\",\"italic\":false},\"txt\":\"\\n呜\"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#0070C0\",\"italic\":false},\"txt\":\"我 我我\"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#000000\",\"italic\":false},\"txt\":\"我我\\nni\"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":true,\"color\":\"#C00000\",\"italic\":true},\"txt\":\"ce wwwwww\\nexample\"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#000000\",\"italic\":false},\"txt\":\" work \"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#C0504D\",\"italic\":false},\"txt\":\"测的的的\"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#C0504D\",\"underline\":\"double\",\"italic\":false},\"txt\":\"的的\"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#000000\",\"underline\":\"double\",\"italic\":false},\"txt\":\"的\"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#000000\",\"italic\":false},\"txt\":\"的到\\n到手 \"},{\"font\":{\"name\":\"arial\",\"size\":18,\"bold\":false,\"color\":\"#000000\",\"italic\":false},\"txt\":\"一级 一季\"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#000000\",\"italic\":false},\"txt\":\"报 击败发\"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#9BBB59\",\"italic\":false},\"txt\":\"发发发发发发\"},{\"font\":{\"name\":\"arial\",\"size\":11,\"bold\":false,\"color\":\"#000000\",\"italic\":false},\"txt\":\"发发发发\"}],\"html\":\"<Font Style=\\\"FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #000000;\\\">F</Font><Font Style=\\\"FONT-FAMILY: arial;FONT-SIZE: 18pt;COLOR: #953735;\\\">FF呜</Font><Font Style=\\\"TEXT-DECORATION: underline;FONT-FAMILY: arial;FONT-SIZE: 18pt;COLOR: #953735;\\\">呜</Font><Font Style=\\\"TEXT-DECORATION: underline;FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #000000;\\\">呜</Font><Font Style=\\\"FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #000000;\\\"><Br>呜</Font><Font Style=\\\"FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #0070c0;\\\">我 我我</Font><Font Style=\\\"FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #000000;\\\">我我<Br>ni</Font><Font Style=\\\"FONT-WEIGHT: bold;FONT-STYLE: italic;FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #c00000;\\\">ce wwwwww<Br>example</Font><Font Style=\\\"FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #000000;\\\"> work </Font><Font Style=\\\"FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #c0504d;\\\">测的的的</Font><Font Style=\\\"TEXT-DECORATION: underline;FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #c0504d;\\\">的的</Font><Font Style=\\\"TEXT-DECORATION: underline;FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #000000;\\\">的</Font><Font Style=\\\"FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #000000;\\\">的到<Br>到手 </Font><Font Style=\\\"FONT-FAMILY: arial;FONT-SIZE: 18pt;COLOR: #000000;\\\">一级 一季</Font><Font Style=\\\"FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #000000;\\\">报 击败发</Font><Font Style=\\\"FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #9bbb59;\\\">发发发发发发</Font><Font Style=\\\"FONT-FAMILY: arial;FONT-SIZE: 11pt;COLOR: #000000;\\\">发发发发</Font>\"},\"4\":{\"text\":\"\",\"style\":1}}},\"len\":13,\"height\":19}},{\"name\":\"Sheet2\",\"sheetid\":\"s1\",\"showGrid\":true,\"sprotected\":false,\"canselectlocked\":true,\"displayRight2Left\":false,\"canselectunlocked\":true,\"cols\":{\"0\":{\"width\":72},\"1\":{\"width\":72},\"2\":{\"width\":72},\"3\":{\"width\":72},\"4\":{\"width\":72},\"5\":{\"width\":72},\"6\":{\"width\":72},\"7\":{\"width\":72},\"8\":{\"width\":72},\"9\":{\"width\":72},\"10\":{\"width\":72},\"11\":{\"width\":72},\"12\":{\"width\":72},\"13\":{\"width\":72},\"14\":{\"width\":72},\"15\":{\"width\":72},\"len\":16},\"rows\":{\"12\":{\"height\":19,\"cells\":{\"15\":{\"text\":\"\"}}},\"len\":13,\"height\":19}},{\"name\":\"Sheet3\",\"sheetid\":\"s2\",\"showGrid\":true,\"sprotected\":false,\"canselectlocked\":true,\"displayRight2Left\":false,\"canselectunlocked\":true,\"cols\":{\"0\":{\"width\":72},\"1\":{\"width\":72},\"2\":{\"width\":72},\"3\":{\"width\":72},\"4\":{\"width\":72},\"5\":{\"width\":72},\"6\":{\"width\":72},\"7\":{\"width\":72},\"8\":{\"width\":72},\"9\":{\"width\":72},\"10\":{\"width\":72},\"11\":{\"width\":72},\"12\":{\"width\":72},\"13\":{\"width\":72},\"14\":{\"width\":72},\"15\":{\"width\":72},\"len\":16},\"rows\":{\"12\":{\"height\":19,\"cells\":{\"15\":{\"text\":\"\"}}},\"len\":13,\"height\":19}}]";
|
|
58
|
-
xs = x_spreadsheet('#gridjs-demo', option).loadData(JSON.parse(sheetstr)).change((cdata) => {
|
|
59
|
-
console.log(cdata);
|
|
60
|
-
console.log(xs.validate());
|
|
61
|
-
}
|
|
62
|
-
</script>
|
|
63
|
-
</head>
|
|
64
|
-
<body>
|
|
65
|
-
<div id="gridjs-demo"></div>
|
|
66
|
-
</body>
|
|
65
|
+
# install for Angular
|
|
66
|
+
npm install @angular/core @angular/common
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
##
|
|
69
|
+
## Package Exports
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
| Usage | Import |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| Core runtime | `gridjs-spreadsheet` |
|
|
74
|
+
| Styles | `gridjs-spreadsheet/xspreadsheet.css` |
|
|
75
|
+
| React component | `gridjs-spreadsheet/react` |
|
|
76
|
+
| Vue 3 component | `gridjs-spreadsheet/vue` |
|
|
77
|
+
| Angular component | `gridjs-spreadsheet/angular` |
|
|
78
|
+
| Shared adapter | `gridjs-spreadsheet/shared` |
|
|
79
|
+
|
|
80
|
+
## Usage
|
|
81
|
+
|
|
82
|
+
### Vanilla JavaScript with npm
|
|
74
83
|
|
|
75
84
|
```html
|
|
76
85
|
<div id="gridjs-demo"></div>
|
|
77
86
|
```
|
|
78
87
|
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
//Including jszip
|
|
88
|
+
```js
|
|
89
|
+
import Spreadsheet from 'gridjs-spreadsheet';
|
|
82
90
|
import JSZip from 'jszip';
|
|
83
|
-
window.JSZip = JSZip;
|
|
84
|
-
//Including jQuery
|
|
85
|
-
import $ from 'jquery';
|
|
86
|
-
window.$ = $;
|
|
87
|
-
//Including gridjs-spreadsheet
|
|
88
91
|
import 'gridjs-spreadsheet/xspreadsheet.css';
|
|
89
|
-
import Spreadsheet from "gridjs-spreadsheet";
|
|
90
|
-
|
|
91
|
-
// If you need to override the default options, you can set the override
|
|
92
|
-
// const options = {};
|
|
93
|
-
// new Spreadsheet('#gridjs-demo', options);
|
|
94
|
-
const s = new Spreadsheet("#gridjs-demo")
|
|
95
|
-
.loadData({}) // load data
|
|
96
|
-
.change(data => {
|
|
97
|
-
// save data to db
|
|
98
|
-
});
|
|
99
92
|
|
|
100
|
-
|
|
93
|
+
window.JSZip = JSZip;
|
|
94
|
+
|
|
95
|
+
const spreadsheet = new Spreadsheet('#gridjs-demo', {
|
|
96
|
+
updateMode: 'server',
|
|
97
|
+
updateUrl: '/GridJs2/UpdateCell',
|
|
98
|
+
mode: 'edit',
|
|
99
|
+
// Support 17+ languages: en, cn, es, pt, de, ru, nl, ar, fr, id, it, ja, ko, th, tr, vi, cht
|
|
100
|
+
local: 'en',
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
spreadsheet.loadData(workbookJson.data, workbookJson.actname);
|
|
104
|
+
spreadsheet.setUniqueId(workbookJson.uniqueid);
|
|
105
|
+
spreadsheet.setFileName(workbookJson.filename);
|
|
101
106
|
```
|
|
102
107
|
|
|
108
|
+
### Vanilla HTML with script tags
|
|
109
|
+
|
|
110
|
+
```html
|
|
111
|
+
<link
|
|
112
|
+
rel="stylesheet"
|
|
113
|
+
href="https://unpkg.com/gridjs-spreadsheet@26.7.0/xspreadsheet.css"
|
|
114
|
+
>
|
|
103
115
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
xs = x_spreadsheet('#gridjs-demo', option).loadData(sheets).change((cdata) => {
|
|
120
|
-
console.log(cdata);
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
116
|
+
<script src="https://unpkg.com/jszip@3.10.1/dist/jszip.min.js"></script>
|
|
117
|
+
<script src="https://unpkg.com/gridjs-spreadsheet/xspreadsheet.js"></script>
|
|
118
|
+
|
|
119
|
+
<div id="gridjs-demo"></div>
|
|
120
|
+
|
|
121
|
+
<script>
|
|
122
|
+
const spreadsheet = x_spreadsheet('#gridjs-demo', {
|
|
123
|
+
updateMode: 'server',
|
|
124
|
+
updateUrl: '/GridJs2/UpdateCell',
|
|
125
|
+
mode: 'edit',
|
|
126
|
+
local: 'en',
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
spreadsheet.loadData(workbookJson.data, workbookJson.actname);
|
|
130
|
+
</script>
|
|
125
131
|
```
|
|
126
132
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
align: 'left',
|
|
151
|
-
valign: 'middle',
|
|
152
|
-
textwrap: false,
|
|
153
|
-
strike: false,
|
|
154
|
-
underline: false,
|
|
155
|
-
color: '#0a0a0a',
|
|
156
|
-
font: {
|
|
157
|
-
name: 'Helvetica',
|
|
158
|
-
size: 10,
|
|
159
|
-
bold: false,
|
|
160
|
-
italic: false,
|
|
161
|
-
},
|
|
162
|
-
},
|
|
133
|
+
### React
|
|
134
|
+
|
|
135
|
+
```jsx
|
|
136
|
+
import { useState } from 'react';
|
|
137
|
+
import { GridJsSpreadsheet } from 'gridjs-spreadsheet/react';
|
|
138
|
+
import 'gridjs-spreadsheet/xspreadsheet.css';
|
|
139
|
+
|
|
140
|
+
export default function App() {
|
|
141
|
+
const [data] = useState(null);
|
|
142
|
+
|
|
143
|
+
return (
|
|
144
|
+
<GridJsSpreadsheet
|
|
145
|
+
data={data}
|
|
146
|
+
apiBase=""
|
|
147
|
+
mode="edit"
|
|
148
|
+
locale="en"
|
|
149
|
+
height="600px"
|
|
150
|
+
onReady={(instance, adapter) => console.log('ready', instance, adapter)}
|
|
151
|
+
onChange={(...args) => console.log('changed', args)}
|
|
152
|
+
onCellSelected={(...args) => console.log('cell selected', args)}
|
|
153
|
+
onError={(error) => console.error(error)}
|
|
154
|
+
/>
|
|
155
|
+
);
|
|
163
156
|
}
|
|
164
157
|
```
|
|
165
158
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
xs.on('cells-deleted', (range) => {
|
|
187
|
-
console.log('cells deleted :', range);
|
|
188
|
-
})
|
|
189
|
-
// rows deleted
|
|
190
|
-
xs.on('rows-deleted', (ri, n) => {
|
|
191
|
-
console.log('rows-deleted :', ri, ",size", n);
|
|
192
|
-
})
|
|
193
|
-
// columns deleted
|
|
194
|
-
xs.on('columns-deleted', (ci, n) => {
|
|
195
|
-
console.log('columns-deleted :', ci, ",size", n);
|
|
196
|
-
})
|
|
197
|
-
// rows inserted
|
|
198
|
-
xs.on('rows-inserted', (ri, n) => {
|
|
199
|
-
console.log('rows-inserted :', ri, ",size", n);
|
|
200
|
-
})
|
|
201
|
-
// columns inserted
|
|
202
|
-
xs.on('columns-inserted', (ci, n) => {
|
|
203
|
-
console.log('columns-inserted :', ci, ",size", n);
|
|
204
|
-
})
|
|
159
|
+
### Vue 3
|
|
160
|
+
|
|
161
|
+
```vue
|
|
162
|
+
<template>
|
|
163
|
+
<GridJsSpreadsheet
|
|
164
|
+
:data="sheetData"
|
|
165
|
+
mode="edit"
|
|
166
|
+
locale="en"
|
|
167
|
+
height="600px"
|
|
168
|
+
@ready="onReady"
|
|
169
|
+
@change="onChange"
|
|
170
|
+
@cell-selected="onCellSelected"
|
|
171
|
+
@error="onError"
|
|
172
|
+
/>
|
|
173
|
+
</template>
|
|
174
|
+
|
|
175
|
+
<script setup>
|
|
176
|
+
import { ref } from 'vue';
|
|
177
|
+
import { GridJsSpreadsheet } from 'gridjs-spreadsheet/vue';
|
|
178
|
+
import 'gridjs-spreadsheet/xspreadsheet.css';
|
|
205
179
|
|
|
180
|
+
const sheetData = ref(null);
|
|
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);
|
|
184
|
+
const onError = error => console.error(error);
|
|
185
|
+
</script>
|
|
206
186
|
```
|
|
207
187
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
188
|
+
### Angular
|
|
189
|
+
|
|
190
|
+
```ts
|
|
191
|
+
import { Component } from '@angular/core';
|
|
192
|
+
import { GridJsSpreadsheetComponent } from 'gridjs-spreadsheet/angular';
|
|
193
|
+
|
|
194
|
+
@Component({
|
|
195
|
+
selector: 'app-root',
|
|
196
|
+
standalone: true,
|
|
197
|
+
imports: [GridJsSpreadsheetComponent],
|
|
198
|
+
template: `
|
|
199
|
+
<gridjs-spreadsheet
|
|
200
|
+
[data]="sheetData"
|
|
201
|
+
mode="edit"
|
|
202
|
+
locale="en"
|
|
203
|
+
height="600px"
|
|
204
|
+
(ready)="onReady($event)"
|
|
205
|
+
(change)="onChange($event)"
|
|
206
|
+
(cellSelected)="onCellSelected($event)"
|
|
207
|
+
(error)="onError($event)"
|
|
208
|
+
/>
|
|
209
|
+
`,
|
|
210
|
+
})
|
|
211
|
+
export class AppComponent {
|
|
212
|
+
sheetData: any = null;
|
|
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); }
|
|
216
|
+
onError(error: any) { console.error(error); }
|
|
217
|
+
}
|
|
213
218
|
```
|
|
214
219
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
220
|
+
Add the GridJS stylesheet to `angular.json`:
|
|
221
|
+
|
|
222
|
+
```json
|
|
223
|
+
"styles": [
|
|
224
|
+
"node_modules/gridjs-spreadsheet/xspreadsheet.css",
|
|
225
|
+
"src/styles.css"
|
|
226
|
+
]
|
|
222
227
|
```
|
|
223
|
-
|
|
224
228
|
|
|
225
|
-
##
|
|
229
|
+
## Framework Adapter API
|
|
226
230
|
|
|
227
|
-
|
|
228
|
-
- Font/Font size/ bold/italic/Underline/Strike
|
|
229
|
-
- Text color/Align/wrapping
|
|
230
|
-
- Fill color / Highlight
|
|
231
|
-
- Number Format / RichText
|
|
232
|
-
- Borders / Condition Format
|
|
233
|
-
- Paint format / Clear format
|
|
231
|
+
The React, Vue, and Angular adapters share the same configuration model:
|
|
234
232
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
-
|
|
244
|
-
|
|
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 |
|
|
245
244
|
|
|
246
|
-
|
|
247
|
-
- Display chart/shapes
|
|
248
|
-
- Display condition icons
|
|
249
|
-
- Shape/Image resize/rotate/position adjustment
|
|
250
|
-
- Insert/Delete/Copy common shapes for autoshape
|
|
251
|
-
- Insert/Delete/Copy Image
|
|
252
|
-
- Display form controls / ActiveX controls
|
|
253
|
-
- Insert/Delete form controls
|
|
254
|
-
- Support display two colors gradient in fill effects
|
|
245
|
+
**Events:** All adapters expose `ready`, `change`, `error`, `cellSelected`, `cellEdited`, `sheetSelected`, and `sheetLoaded` events using each framework's normal event conventions.
|
|
255
246
|
|
|
256
|
-
|
|
257
|
-
- Redact sensitive data
|
|
258
|
-
- Add/delete Comment
|
|
259
|
-
- Add/delete Links
|
|
260
|
-
- Print
|
|
261
|
-
- Localization/Multiple language UI
|
|
262
|
-
- Mobile compatibility
|
|
247
|
+
> **Note:** GridJS requires a browser DOM. When using SSR frameworks (Next.js, Nuxt, Angular Universal), mount the adapters on the client side only.
|
|
263
248
|
|
|
249
|
+
## Core API
|
|
264
250
|
|
|
265
|
-
|
|
251
|
+
The core `Spreadsheet` class provides a rich JavaScript API:
|
|
266
252
|
|
|
267
|
-
|
|
253
|
+
```js
|
|
254
|
+
const xs = new Spreadsheet('#container', options);
|
|
268
255
|
|
|
269
|
-
|
|
256
|
+
// Load data
|
|
257
|
+
xs.loadData(jsonData);
|
|
270
258
|
|
|
271
|
-
|
|
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) => { });
|
|
272
270
|
|
|
273
|
-
|
|
271
|
+
// Cell operations
|
|
272
|
+
xs.cellText(5, 5, 'Hello');
|
|
273
|
+
xs.cell(ri, ci);
|
|
274
|
+
xs.cellStyle(ri, ci);
|
|
274
275
|
|
|
276
|
+
// Sheet operations
|
|
277
|
+
xs.setActiveSheet(index);
|
|
278
|
+
xs.setActiveSheetByName('Sheet2');
|
|
279
|
+
xs.setActiveCell(rowIndex, colIndex);
|
|
280
|
+
xs.getData();
|
|
275
281
|
|
|
282
|
+
// Server integration
|
|
283
|
+
xs.setUniqueId('workbook-id');
|
|
284
|
+
xs.setFileName('report.xlsx');
|
|
285
|
+
xs.refreshToken(token);
|
|
276
286
|
|
|
277
|
-
|
|
287
|
+
// Cleanup
|
|
288
|
+
xs.destroy();
|
|
289
|
+
```
|
|
278
290
|
|
|
279
|
-
|
|
291
|
+
Full API documentation: [API Reference](https://docs.aspose.com/cells/net/aspose-cells-gridjs/how-to-use-gridjs-client-api/)
|
|
280
292
|
|
|
281
|
-
|
|
282
|
-
- [API Reference C#](https://docs.aspose.com/cells/net/aspose-cells-gridjs/client/)
|
|
283
|
-
- [Developer's Guide Python](https://docs.aspose.com/cells/python-net/aspose-cells-gridjs/)
|
|
284
|
-
- [API Reference Python](https://docs.aspose.com/cells/python-net/aspose-cells-gridjs/client/)
|
|
285
|
-
- [Developer's Guide JAVA](https://docs.aspose.com/cells/java/aspose-cells-gridjs/)
|
|
286
|
-
- [API Reference JAVA](https://docs.aspose.com/cells/java/aspose-cells-gridjs/client/)
|
|
293
|
+
### Default Options
|
|
287
294
|
|
|
288
|
-
|
|
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
|
+
}
|
|
316
|
+
```
|
|
289
317
|
|
|
290
|
-
|
|
318
|
+
## Features
|
|
291
319
|
|
|
292
|
-
|
|
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
|
+
From version 26.7.0 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).
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
cp -R node_modules/gridjs-spreadsheet/example ./gridjs-example
|
|
378
|
+
cd gridjs-example
|
|
379
|
+
./mvnw spring-boot:run -Dmaven.test.skip=true
|
|
380
|
+
```
|
|
293
381
|
|
|
294
|
-
|
|
382
|
+
See [`example/README.md`](example/README.md) for all framework commands, ports, backend configuration, and troubleshooting.
|
|
295
383
|
|
|
296
|
-
|
|
297
|
-
- Fix bug that fail to rename worksheet
|
|
298
|
-
- Support lazy loading
|
|
384
|
+
Additional demos for .NET, Java, and Python:
|
|
299
385
|
|
|
300
|
-
|
|
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>
|
|
301
389
|
|
|
302
|
-
|
|
390
|
+
## Browser Support
|
|
303
391
|
|
|
304
|
-
|
|
392
|
+
Modern browsers — Chrome, Firefox, Safari, Edge.
|
|
305
393
|
|
|
306
|
-
|
|
394
|
+
## Version History
|
|
307
395
|
|
|
308
|
-
|
|
396
|
+
<details>
|
|
397
|
+
<summary><strong>v26.7.1</strong> — Improve performance for redaction</summary>
|
|
309
398
|
|
|
310
|
-
-
|
|
311
|
-
|
|
312
|
-
- Support row/column insert/delete events for client APIs
|
|
313
|
-
- Support events for updating cells
|
|
314
|
-
- Support multiple instances on one page
|
|
399
|
+
- Improve performance for redaction
|
|
400
|
+
</details>
|
|
315
401
|
|
|
316
|
-
|
|
402
|
+
<details>
|
|
403
|
+
<summary><strong>v26.7</strong> — Fix issue for filter in merge area</summary>
|
|
317
404
|
|
|
318
|
-
-
|
|
405
|
+
- Fix issue for filter in merge area
|
|
406
|
+
</details>
|
|
319
407
|
|
|
320
|
-
|
|
408
|
+
<details>
|
|
409
|
+
<summary><strong>v26.6</strong> — Improve redaction</summary>
|
|
321
410
|
|
|
322
|
-
-
|
|
323
|
-
-
|
|
411
|
+
- Improve redaction feature
|
|
412
|
+
- Fix redaction font issue
|
|
413
|
+
- Fix redaction transparent view issue
|
|
414
|
+
</details>
|
|
324
415
|
|
|
325
|
-
|
|
416
|
+
<details>
|
|
417
|
+
<summary><strong>v26.5</strong> — Custom toolbar buttons, date picker, filter, print</summary>
|
|
326
418
|
|
|
327
|
-
- Support
|
|
328
|
-
-
|
|
419
|
+
- Support add custom buttons in toolbar
|
|
420
|
+
- Improve date picker
|
|
421
|
+
- Improve filter display
|
|
422
|
+
- Improve print
|
|
423
|
+
- Improve scroll in zoom
|
|
424
|
+
</details>
|
|
329
425
|
|
|
330
|
-
|
|
426
|
+
<details>
|
|
427
|
+
<summary><strong>v26.4</strong> — Redaction, shape lock, zoom snap</summary>
|
|
331
428
|
|
|
332
|
-
-
|
|
429
|
+
- Add redaction features
|
|
430
|
+
- Fix paste scroll issue
|
|
431
|
+
- Support shape lock
|
|
432
|
+
- Support snap to cell area in zoom in/out
|
|
433
|
+
- Add boundary check for redaction
|
|
434
|
+
</details>
|
|
333
435
|
|
|
334
|
-
|
|
436
|
+
<details>
|
|
437
|
+
<summary><strong>v26.3</strong> — Improve filter/validations/charts</summary>
|
|
335
438
|
|
|
336
|
-
-
|
|
337
|
-
|
|
439
|
+
- Improve filter/validations/charts
|
|
440
|
+
</details>
|
|
338
441
|
|
|
339
|
-
|
|
442
|
+
<details>
|
|
443
|
+
<summary><strong>v26.2</strong> — Performance improvement for large rows</summary>
|
|
340
444
|
|
|
341
|
-
-
|
|
342
|
-
|
|
445
|
+
- Improve client performance for large rows
|
|
446
|
+
</details>
|
|
343
447
|
|
|
344
|
-
|
|
448
|
+
<details>
|
|
449
|
+
<summary><strong>v26.1</strong> — Rotated text highlight, more charts</summary>
|
|
345
450
|
|
|
346
|
-
- Support
|
|
347
|
-
- Support
|
|
348
|
-
|
|
349
|
-
- Support APIs to set attribute for range of cells
|
|
350
|
-
- Support APIs to delete for range of cells
|
|
451
|
+
- Support highlight text with rotation
|
|
452
|
+
- Support more charts rendering in client
|
|
453
|
+
</details>
|
|
351
454
|
|
|
352
|
-
|
|
455
|
+
<details>
|
|
456
|
+
<summary><strong>v25.12</strong> — Sort by color, multi-select validation</summary>
|
|
353
457
|
|
|
354
|
-
- Support
|
|
355
|
-
- Support
|
|
458
|
+
- Support sort by cell color/font color
|
|
459
|
+
- Support add multiple selection validation list
|
|
460
|
+
</details>
|
|
356
461
|
|
|
357
|
-
|
|
462
|
+
<details>
|
|
463
|
+
<summary><strong>v25.11</strong> — Chart fill colors, color picker</summary>
|
|
358
464
|
|
|
359
|
-
- Support
|
|
465
|
+
- Support fill color settings for charts
|
|
466
|
+
- Support 'Fill Color' and 'Font Color' button dropdown selection and click to fill
|
|
467
|
+
</details>
|
|
360
468
|
|
|
361
|
-
|
|
469
|
+
<details>
|
|
470
|
+
<summary><strong>v25.10</strong> — Custom toast, modal CSS</summary>
|
|
362
471
|
|
|
363
|
-
- Support APIs to set customToast
|
|
472
|
+
- Support APIs to set customToast
|
|
364
473
|
- Support CSS identify for model window
|
|
474
|
+
</details>
|
|
365
475
|
|
|
366
|
-
|
|
476
|
+
<details>
|
|
477
|
+
<summary><strong>v25.9</strong> — Pattern fill style</summary>
|
|
367
478
|
|
|
368
|
-
- Support
|
|
369
|
-
|
|
479
|
+
- Support to render pattern style for cell
|
|
480
|
+
</details>
|
|
370
481
|
|
|
371
|
-
|
|
482
|
+
<details>
|
|
483
|
+
<summary><strong>v25.8</strong> — Auto text wrap, textbox font</summary>
|
|
372
484
|
|
|
373
|
-
- Support
|
|
374
|
-
- Support
|
|
485
|
+
- Support automatic text wrapping
|
|
486
|
+
- Support API to apply font setting in textbox control
|
|
487
|
+
</details>
|
|
375
488
|
|
|
376
|
-
|
|
489
|
+
<details>
|
|
490
|
+
<summary><strong>v25.7</strong> — Editable range, worksheet/comment/range APIs</summary>
|
|
377
491
|
|
|
378
|
-
- Support
|
|
379
|
-
- Support
|
|
492
|
+
- Support APIs to enable/disable editable range
|
|
493
|
+
- Support APIs to add/modify/delete worksheet
|
|
494
|
+
- Support APIs to add/modify/delete comment
|
|
495
|
+
- Support APIs to set attribute for range of cells
|
|
496
|
+
- Support APIs to delete for range of cells
|
|
497
|
+
</details>
|
|
380
498
|
|
|
381
|
-
|
|
499
|
+
<details>
|
|
500
|
+
<summary><strong>v25.6</strong> — Resize/hide rows and columns</summary>
|
|
382
501
|
|
|
383
|
-
-
|
|
384
|
-
|
|
385
|
-
|
|
502
|
+
- Support APIs for resize rows/columns
|
|
503
|
+
- Support APIs for hide/unhide rows/columns
|
|
504
|
+
</details>
|
|
386
505
|
|
|
387
|
-
|
|
506
|
+
<details>
|
|
507
|
+
<summary><strong>v25.5</strong> — Polish locale, row/column APIs</summary>
|
|
388
508
|
|
|
389
|
-
|
|
509
|
+
- Add support for Polish menus
|
|
510
|
+
- Support APIs for insert/delete rows/columns
|
|
511
|
+
</details>
|
|
390
512
|
|
|
391
|
-
|
|
392
|
-
|
|
513
|
+
<details>
|
|
514
|
+
<summary><strong>v25.4</strong> — Status bar statistics</summary>
|
|
393
515
|
|
|
394
|
-
|
|
516
|
+
- Support show statistics information in the lower right corner when cells are selected
|
|
517
|
+
</details>
|
|
395
518
|
|
|
396
|
-
|
|
519
|
+
<details>
|
|
520
|
+
<summary><strong>v25.3</strong> — Shortcut keys, multi-area paste</summary>
|
|
397
521
|
|
|
398
|
-
|
|
522
|
+
- Support more shortcut keys
|
|
523
|
+
- Support pasting the content copied from Excel to multiple target areas
|
|
524
|
+
</details>
|
|
399
525
|
|
|
400
|
-
|
|
526
|
+
<details>
|
|
527
|
+
<summary><strong>v25.2</strong> — Excel paste, auto operations</summary>
|
|
401
528
|
|
|
402
|
-
|
|
529
|
+
- Support copy/paste from MS-Excel
|
|
530
|
+
- Enhancement for automatic operations — extending blank row/column, page scrolling, etc.
|
|
531
|
+
</details>
|
|
403
532
|
|
|
404
|
-
|
|
533
|
+
<details>
|
|
534
|
+
<summary><strong>v25.1</strong> — Excel copy/paste</summary>
|
|
405
535
|
|
|
406
|
-
|
|
536
|
+
- Support copy/paste from MS-Excel
|
|
537
|
+
</details>
|
|
407
538
|
|
|
408
|
-
|
|
539
|
+
<details>
|
|
540
|
+
<summary><strong>v24.12</strong> — HTML nodes, multi-instance, row/column events</summary>
|
|
409
541
|
|
|
410
|
-
|
|
542
|
+
- Support API to show HTML nodes and interact with HTML nodes at specified cell positions
|
|
543
|
+
- Support pre-check event for row/column delete/insert operations
|
|
544
|
+
- Support row/column insert/delete events for client APIs
|
|
545
|
+
- Support events for updating cells
|
|
546
|
+
- Support multiple instances on one page
|
|
547
|
+
</details>
|
|
411
548
|
|
|
412
|
-
|
|
549
|
+
<details>
|
|
550
|
+
<summary><strong>v24.11</strong> — Rich text display</summary>
|
|
413
551
|
|
|
414
|
-
|
|
552
|
+
- Improve the display of rich text cell values
|
|
553
|
+
</details>
|
|
415
554
|
|
|
416
|
-
|
|
417
|
-
|
|
555
|
+
<details>
|
|
556
|
+
<summary><strong>v24.10</strong> — Show formulas</summary>
|
|
418
557
|
|
|
419
|
-
|
|
558
|
+
- Support a view option to show formulas
|
|
559
|
+
</details>
|
|
420
560
|
|
|
421
|
-
|
|
561
|
+
<details>
|
|
562
|
+
<summary><strong>v24.9.1</strong> — Initial release</summary>
|
|
422
563
|
|
|
423
|
-
|
|
564
|
+
- Fix bug that fail to insert column in the new added worksheet
|
|
565
|
+
- Fix bug that fail to rename worksheet
|
|
566
|
+
- Support lazy loading
|
|
567
|
+
</details>
|
|
424
568
|
|
|
425
|
-
|
|
569
|
+
## Resources
|
|
426
570
|
|
|
427
|
-
|
|
571
|
+
### Documentation
|
|
572
|
+
- [Developer's Guide — .NET / C#](https://docs.aspose.com/cells/net/aspose-cells-gridjs/)
|
|
573
|
+
- [Developer's Guide — Java](https://docs.aspose.com/cells/java/aspose-cells-gridjs/)
|
|
574
|
+
- [Developer's Guide — Python](https://docs.aspose.com/cells/python-net/aspose-cells-gridjs/)
|
|
575
|
+
- [Client API How-To](https://docs.aspose.com/cells/net/aspose-cells-gridjs/how-to-use-gridjs-client-api/)
|
|
428
576
|
|
|
429
|
-
|
|
577
|
+
### Product Links
|
|
578
|
+
- [Aspose.Cells Product Page](https://products.aspose.com/cells)
|
|
579
|
+
- [GridJs Online Demo](https://products.aspose.app/cells/editor)
|
|
580
|
+
- [API Reference — .NET / C#](https://reference.aspose.com/cells/net/aspose.cells.gridjs/)
|
|
581
|
+
- [API Reference — Java](https://reference.aspose.com/cells/java/com.aspose.gridjs/)
|
|
582
|
+
- [API Reference — Python](https://reference.aspose.com/cells/python-net/aspose.cellsgridjs/)
|
|
583
|
+
- [Blog](https://blog.aspose.com/categories/aspose.cells-product-family/)
|
|
430
584
|
|
|
431
|
-
|
|
585
|
+
### Source Code & Samples
|
|
586
|
+
- [.NET Examples](https://github.com/aspose-cells/Aspose.Cells.Grid-for-.NET/tree/main/Examples_GridJs)
|
|
587
|
+
- [Java Examples](https://github.com/aspose-cells/Aspose.Cells.Grid-for-Java/tree/master/Examples.GridJs)
|
|
588
|
+
- [Python Examples](https://github.com/aspose-cells/Aspose.Cells.Grid-for-Python-via-.NET/tree/main/Examples.GridJs)
|
|
432
589
|
|
|
433
|
-
|
|
590
|
+
### Free Support
|
|
591
|
+
- [Aspose.Cells Forum](https://forum.aspose.com/c/cells) — ask questions, request features, report bugs
|
|
434
592
|
|
|
435
593
|
## License
|
|
436
594
|
|
|
437
595
|
MIT
|
|
438
|
-
|
|
439
|
-
## Support
|
|
440
|
-
|
|
441
|
-
You can ask any question or request features or report bugs using the [Forum](https://forum.aspose.com/c/cells).
|
|
442
|
-
|
|
443
|
-
[Product Page](https://products.aspose.com/cells) | [Product Documentation](https://docs.aspose.com/cells/net/aspose-cells-gridjs/) | [Blog](https://blog.aspose.com/category/cells/) |[API Reference](https://reference.aspose.com/cells/net/aspose.cells.gridjs/) | [Source Code Samples](https://github.com/aspose-cells/Aspose.Cells.Grid-for-.NET/tree/main/Examples_GridJs) | [Free Support](https://forum.aspose.com/c/cells)
|