JavaScript Data Grid with Advanced Spreadsheet Controls
With the best front-end data grid component, developers can integrate professional spreadsheet controls into their applications faster and more flexibly than ever.
Used by the world’s leading companies




Manipulate large amounts of data in a tabular format
Work with literally millions of records in milliseconds. The new data grid version includes a navigation system that leverages the viewport to load only the data visible to the user. This feature enhances the user experience by creating a seamless and speedy performance while minimizing the application's resource utilization.
Sheet7
undo
redo
save
Default
Default
Verdana
Arial
Courier New
format_size
x-small
small
medium
large
x-large
format_align_left
format_align_left
format_align_center
format_align_right
format_align_justify
format_bold
format_color_text
format_color_fill
vertical_align_center
vertical_align_top
vertical_align_center
vertical_align_bottom
web
border_all
border_all
border_outer
border_inner
border_horizontal
border_vertical
border_left
border_top
border_right
border_bottom
border_clear
Reset
Done
Grid
Spectrum
Sliders
0
0
0
a
add_photo_alternate
fullscreen
search
addchart
rule
interests
Sort smallest to largest
Sort largest to smallest
addchart
Insert chart
Chart settings
- Configuration
- Styling
add
Area Chart
Stacked Area Chart
100% Stacked Area Chart
Bar Chart
Stacked Bar Chart
100% Stacked Bar Chart
Column Chart
Stacked Column Chart
100% Stacked Column Chart
Line
Histogram
Pareto
Pie
Doughnut
Radar
Filled radar
Bubble
Horizontal
Vertical
Top
Bottom
Left
Right
Top
Bottom
Left
Right
rule
Validations
Warning message
Reject entry
Format style
Number
Text
Date
Time
List
Text length
Cell is empty
Cell is not empty
Formula
between
is not between
less than
less than or equal to
bigger than
bigger than or equal to
equal to
different to
S
M
T
W
T
F
S
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
:
S
M
T
W
T
F
S
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
:
Formatting Options
- Grid
- Spectrum
add
- Grid
- Spectrum
add
Back
interests
Insert Shape
interests
Shape Settings
- Grid
- Spectrum
add
- Grid
- Spectrum
add
0
1
2
3
4
5
6
7
8
- Grid
- Spectrum
add
print
Print
Scope:
Current worksheet
Current worksheet
Spreadsheet
Selected cells
Page size:
A4
Letter
Tabloid
Legal
A3
A4
A5
B4
B5
Page orientation:
Landscape
Portrait
Landscape
Scale:
Normal (100%)
Normal (100%)
Fit to one page
Fit to width
Fit to height
Margins:
Normal
Narrow
Normal
Wide
Order of pages:
Left to right
Left to right
Top to bottom
Horizontal alignment:
Center
Left
Center
Right
Vertical alignment:
Center
Top
Center
Bottom
Search and replace
Find | |
Replace by | |
Search | |
A | B | C | D | E | F | G | H | I | J | K | L | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 6 | ||||||||||
2 | 2 | |||||||||||
3 | 3 | |||||||||||
4 | ||||||||||||
5 | ||||||||||||
6 | ||||||||||||
7 | ||||||||||||
8 | ||||||||||||
9 | ||||||||||||
10 | ||||||||||||
11 | ||||||||||||
12 | ||||||||||||
13 | ||||||||||||
14 | ||||||||||||
15 | ||||||||||||
16 | ||||||||||||
17 | ||||||||||||
18 | ||||||||||||
19 | ||||||||||||
20 |
The table was created in: 324ms
The One Billion Cells JavaScript Data Grid (10000 x 100000)
style
Sheet1
Sort smallest to largest
Sort largest to smallest
addchart
Insert chart
Chart settings
- Configuration
- Styling
add
Area Chart
Stacked Area Chart
100% Stacked Area Chart
Bar Chart
Stacked Bar Chart
100% Stacked Bar Chart
Column Chart
Stacked Column Chart
100% Stacked Column Chart
Line
Histogram
Pareto
Pie
Doughnut
Radar
Filled radar
Bubble
Horizontal
Vertical
Top
Bottom
Left
Right
Top
Bottom
Left
Right
rule
Validations
Warning message
Reject entry
Format style
Number
Text
Date
Time
List
Text length
Cell is empty
Cell is not empty
Formula
between
is not between
less than
less than or equal to
bigger than
bigger than or equal to
equal to
different to
S
M
T
W
T
F
S
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
:
S
M
T
W
T
F
S
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
:
Formatting Options
- Grid
- Spectrum
add
- Grid
- Spectrum
add
Back
interests
Insert Shape
interests
Shape Settings
- Grid
- Spectrum
add
- Grid
- Spectrum
add
0
1
2
3
4
5
6
7
8
- Grid
- Spectrum
add
print
Print
Scope:
Current worksheet
Current worksheet
Spreadsheet
Selected cells
Page size:
A4
Letter
Tabloid
Legal
A3
A4
A5
B4
B5
Page orientation:
Landscape
Portrait
Landscape
Scale:
Normal (100%)
Normal (100%)
Fit to one page
Fit to width
Fit to height
Margins:
Normal
Narrow
Normal
Wide
Order of pages:
Left to right
Left to right
Top to bottom
Horizontal alignment:
Center
Left
Center
Right
Vertical alignment:
Center
Top
Center
Bottom
Search and replace
Find | |
Replace by | |
Search | |
A | B | C | D | |
---|---|---|---|---|
1 | ||||
2 | ||||
3 | ||||
4 |
<html>
<script src="https://jspreadsheet.com/v11/jspreadsheet.js"></script>
<script src="https://jsuites.net/v5/jsuites.js"></script>
<link rel="stylesheet" href="https://jspreadsheet.com/v11/jspreadsheet.css" type="text/css" />
<link rel="stylesheet" href="https://jsuites.net/v5/jsuites.css" type="text/css" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />
<div id="root"></div>
<script>
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
// Create the spreadsheet
jspreadsheet(document.getElementById('root'), {
worksheets: [{
minDimensions: [4,4],
style: {
'A:A': 'background-color: #ccffff; font-weight: bold',
'C2': 'background-color: #ccffff;',
},
}]
});
</script>
</html>
import React, { useRef } from "react";
import { Spreadsheet, Worksheet } from "@jspreadsheet/react";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
const license = 'ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==';
export default function App() {
// Spreadsheet array of worksheets
const spreadsheet = useRef();
// Render component
return (
<>
<Spreadsheet ref={spreadsheet} license={license} tabs>
<Worksheet minDimensions={[4, 3]} />
<Worksheet minDimensions={[4, 3]} />
</Spreadsheet>
</>
);
}
<template>
<Spreadsheet ref="spreadsheet" :license="license">
<Worksheet :minDimensions="[4,3]" />
<Worksheet :minDimensions="[4,3]" />
</Spreadsheet>
</template>
<script>
import { Spreadsheet, Worksheet } from "@jspreadsheet/vue";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
export default {
components: {
Spreadsheet,
Worksheet,
},
data() {
return {
// License
license: 'ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==',
};
}
}
</script>
import { Component, ViewChild, ElementRef } from "@angular/core";
import jspreadsheet from "jspreadsheet";
import "jspreadsheet/dist/jspreadsheet.css";
import "jsuites/dist/jsuites.css";
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
@Component({
standalone: true,
selector: "app-root",
template: `<div #spreadsheet></div>`
})
export class AppComponent {
@ViewChild("spreadsheet") spreadsheet: ElementRef;
// Worksheets
worksheets: jspreadsheet.worksheetInstance[];
// Create a new data grid
ngAfterViewInit() {
// Create spreadsheet
this.worksheets = jspreadsheet(this.spreadsheet.nativeElement, {
// Allow create a new tab button
tabs: true,
// Initial worksheet
worksheets: [
{ minDimensions: [4, 3] },
{ minDimensions: [4, 3] },
],
});
}
}
tabs
Sheet2
Sheet3
Sort smallest to largest
Sort largest to smallest
addchart
Insert chart
Chart settings
- Configuration
- Styling
add
Area Chart
Stacked Area Chart
100% Stacked Area Chart
Bar Chart
Stacked Bar Chart
100% Stacked Bar Chart
Column Chart
Stacked Column Chart
100% Stacked Column Chart
Line
Histogram
Pareto
Pie
Doughnut
Radar
Filled radar
Bubble
Horizontal
Vertical
Top
Bottom
Left
Right
Top
Bottom
Left
Right
rule
Validations
Warning message
Reject entry
Format style
Number
Text
Date
Time
List
Text length
Cell is empty
Cell is not empty
Formula
between
is not between
less than
less than or equal to
bigger than
bigger than or equal to
equal to
different to
S
M
T
W
T
F
S
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
:
S
M
T
W
T
F
S
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
:
Formatting Options
- Grid
- Spectrum
add
- Grid
- Spectrum
add
Back
interests
Insert Shape
interests
Shape Settings
- Grid
- Spectrum
add
- Grid
- Spectrum
add
0
1
2
3
4
5
6
7
8
- Grid
- Spectrum
add
print
Print
Scope:
Current worksheet
Current worksheet
Spreadsheet
Selected cells
Page size:
A4
Letter
Tabloid
Legal
A3
A4
A5
B4
B5
Page orientation:
Landscape
Portrait
Landscape
Scale:
Normal (100%)
Normal (100%)
Fit to one page
Fit to width
Fit to height
Margins:
Normal
Narrow
Normal
Wide
Order of pages:
Left to right
Left to right
Top to bottom
Horizontal alignment:
Center
Left
Center
Right
Vertical alignment:
Center
Top
Center
Bottom
Search and replace
Find | |
Replace by | |
Search | |
A | B | C | D | |
---|---|---|---|---|
1 | ||||
2 | ||||
3 |
<html>
<script src="https://jspreadsheet.com/v11/jspreadsheet.js"></script>
<script src="https://jsuites.net/v5/jsuites.js"></script>
<link rel="stylesheet" href="https://jspreadsheet.com/v11/jspreadsheet.css" type="text/css" />
<link rel="stylesheet" href="https://jsuites.net/v5/jsuites.css" type="text/css" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />
<div id="root"></div>
<script>
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
// Create the spreadsheet
let worksheets = jspreadsheet(document.getElementById('root'), {
// Allow create a new tab button
tabs: true,
// Initial worksheet
worksheets: [
{ minDimensions: [4, 3] },
{ minDimensions: [4, 3] },
],
});
</script>
</html>
import React, { useRef } from "react";
import { Spreadsheet, Worksheet } from "@jspreadsheet/react";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
const license = 'ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==';
export default function App() {
// Spreadsheet array of worksheets
const spreadsheet = useRef();
// Render component
return (
<>
<Spreadsheet ref={spreadsheet} license={license} tabs>
<Worksheet minDimensions={[4,3]} />
<Worksheet minDimensions={[4,3]} />
</Spreadsheet>
</>
);
}
<template>
<Spreadsheet ref="spreadsheet" :license="license">
<Worksheet :minDimensions="[4,3]" />
<Worksheet :minDimensions="[4,3]" />
</Spreadsheet>
</template>
<script>
import { Spreadsheet, Worksheet } from "@jspreadsheet/vue";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
const license = 'ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==';
export default {
components: {
Spreadsheet,
Worksheet,
},
data() {
return {
// License
license: license,
};
}
}
</script>
import { Component, ViewChild, ElementRef } from "@angular/core";
import jspreadsheet from "jspreadsheet";
import "jspreadsheet/dist/jspreadsheet.css"
import "jsuites/dist/jsuites.css"
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
@Component({
standalone: true,
selector: "app-root",
template: "<div #spreadsheet></div>"
})
export class AppComponent {
@ViewChild("spreadsheet") spreadsheet: ElementRef;
// Worksheets
worksheets: jspreadsheet.worksheetInstance[];
// Create a new data grid
ngAfterViewInit() {
// Create spreadsheet
this.worksheets = jspreadsheet(this.spreadsheet.nativeElement, {
// Allow create a new tab button
tabs: true,
// Initial worksheet
worksheets: [
{ minDimensions: [4,3] },
{ minDimensions: [4,3] },
],
});
}
}
parser
<html>
<script src="https://jspreadsheet.com/v11/jspreadsheet.js"></script>
<script src="https://jsuites.net/v5/jsuites.js"></script>
<link rel="stylesheet" href="https://jspreadsheet.com/v11/jspreadsheet.css" type="text/css" />
<link rel="stylesheet" href="https://jsuites.net/v5/jsuites.css" type="text/css" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />
<script src="https://cdn.jsdelivr.net/npm/jszip@3.6.0/dist/jszip.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@jspreadsheet/parser/dist/index.min.js"></script>
<div id="spreadsheet"></div>
<input type="file" name="file" id='file' style='display:none'>
<p><input type='button' value='Upload a .XLSX' onclick="document.getElementById('file').click()"/></p>
<script>
// Set license
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
// Set extensions
jspreadsheet.setExtensions({ parser });
// Root
let root = document.getElementById('spreadsheet');
// Create the spreadsheet from a local file
let load = function(e) {
// Parse XLSX file and create a new spreadsheet
jspreadsheet.parser({
file: e.target.files[0],
// It would be used to updated the formats only
locale: 'en-GB',
onload: function(config) {
jspreadsheet(root, config);
},
onerror: function(error) {
alert(error);
}
});
}
document.getElementById("file").onchange = (e) => load(e)
</script>
</html>
import React, { useRef } from "react";
import { jspreadsheet } from "@jspreadsheet/react";
import parser from "@jspreadsheet/parser";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
// Set license
jspreadsheet.setLicense("ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==");
// Set extensions
jspreadsheet.setExtensions({ parser });
export default function App() {
// Spreadsheet array of worksheets
const spreadsheet = useRef(null);
const inputRef = useRef(null);
const style = { 'display: none' };
// Create the spreadsheet from a local file
const load = function (e) {
// Parse XLSX file and create a new spreadsheet
jspreadsheet.parser({
file: e.target.files[0],
// It would be used to update the formats only
locale: "en-GB",
onload: function (config) {
jspreadsheet(spreadsheet.current, config);
},
onerror: function (error) {
alert(error);
},
});
};
// Render component
return (
<>
<div ref={spreadsheet}></div>
<input
ref={inputRef}
id="file"
type="file"
name="file"
onChange={load}
style={style}
/>
<input
type="button"
value="Load a XLSX file from my local computer"
onClick={() => inputRef.current.click()}
/>
</>
);
}
<template>
<div ref="spreadsheet"></div>
<input
type="file"
name="file"
ref="fileInput"
@change="loadFile"
style="display: none"
/>
<input
type="button"
value="Load a XLSX file from my local computer"
@click="triggerFileInput"
/>
</template>
<script>
import { jspreadsheet } from "@jspreadsheet/vue";
import parser from "@jspreadsheet/parser";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
jspreadsheet.setExtensions({ parser });
export default {
methods: {
triggerFileInput() {
this.$refs.fileInput.click();
},
loadFile(e) {
const spreadsheetEl = this.$refs.spreadsheet;
jspreadsheet.parser({
file: e.target.files[0],
locale: "en-GB",
onload: function (config) {
jspreadsheet(spreadsheetEl, config);
},
onerror: function (error) {
alert(error);
},
});
},
},
};
</script>
import { Component, ViewChild, ElementRef } from "@angular/core";
import jspreadsheet from "jspreadsheet";
import parser from "@jspreadsheet/parser";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
// Set the extensions
jspreadsheet.setExtensions({ parser });
@Component({
standalone: true,
selector: "app-root",
template: '<div #spreadsheet></div><input #file type="file" name="file" style="display:none" /><input type="button" value="Load a XLSX file from my local computer" (click)="this.file.click()"/>'
})
export class AppComponent {
@ViewChild("spreadsheet") spreadsheet: ElementRef;
@ViewChild("file") file: ElementRef;
ngAfterViewInit() {
let spreadsheet = this.spreadsheet.nativeElement;
// Add event to the file input
this.file.nativeElement.onchange = function (e) {
// Parse XLSX file and create a new spreadsheet
jspreadsheet.parser({
file: e.target.files[0],
locale: "en-GB",
onload: function (config) {
jspreadsheet(spreadsheet, config);
},
onerror: function (error) {
alert(error);
}
});
};
}
}
render
Sheet4
Sheet5
Sort smallest to largest
Sort largest to smallest
addchart
Insert chart
Chart settings
- Configuration
- Styling
add
Area Chart
Stacked Area Chart
100% Stacked Area Chart
Bar Chart
Stacked Bar Chart
100% Stacked Bar Chart
Column Chart
Stacked Column Chart
100% Stacked Column Chart
Line
Histogram
Pareto
Pie
Doughnut
Radar
Filled radar
Bubble
Horizontal
Vertical
Top
Bottom
Left
Right
Top
Bottom
Left
Right
rule
Validations
Warning message
Reject entry
Format style
Number
Text
Date
Time
List
Text length
Cell is empty
Cell is not empty
Formula
between
is not between
less than
less than or equal to
bigger than
bigger than or equal to
equal to
different to
S
M
T
W
T
F
S
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
:
S
M
T
W
T
F
S
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
:
Formatting Options
- Grid
- Spectrum
add
- Grid
- Spectrum
add
Back
interests
Insert Shape
interests
Shape Settings
- Grid
- Spectrum
add
- Grid
- Spectrum
add
0
1
2
3
4
5
6
7
8
- Grid
- Spectrum
add
print
Print
Scope:
Current worksheet
Current worksheet
Spreadsheet
Selected cells
Page size:
A4
Letter
Tabloid
Legal
A3
A4
A5
B4
B5
Page orientation:
Landscape
Portrait
Landscape
Scale:
Normal (100%)
Normal (100%)
Fit to one page
Fit to width
Fit to height
Margins:
Normal
Narrow
Normal
Wide
Order of pages:
Left to right
Left to right
Top to bottom
Horizontal alignment:
Center
Left
Center
Right
Vertical alignment:
Center
Top
Center
Bottom
Search and replace
Find | |
Replace by | |
Search | |
A | B | C | D | |
---|---|---|---|---|
1 | ||||
2 | ||||
3 |
<html>
<script src="https://jspreadsheet.com/v11/jspreadsheet.js"></script>
<script src="https://jsuites.net/v5/jsuites.js"></script>
<link rel="stylesheet" href="https://jspreadsheet.com/v11/jspreadsheet.css" type="text/css" />
<link rel="stylesheet" href="https://jsuites.net/v5/jsuites.css" type="text/css" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />
<script src="https://cdn.jsdelivr.net/npm/jszip@3.6.0/dist/jszip.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@jspreadsheet/render/dist/index.min.js"></script>
<div id='spreadsheet'></div>
<p><input type="button" value="Download" id="btn1" /></p>
<script>
const download = function(spreadsheet) {
jspreadsheet.render(spreadsheet, {
filename: 'file.xlsx',
});
}
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
// Add-on for Spreadsheet
jspreadsheet.setExtensions({ render });
// Create the spreadsheets
let worksheets = jspreadsheet(document.getElementById('spreadsheet'), {
worksheets: [
{ minDimensions: [4, 3] },
{ minDimensions: [4, 3] },
],
});
document.getElementById("btn1").onclick = function() {
download(worksheets[0].parent);
}
</script>
</html>
import React, { useRef } from "react";
import { Spreadsheet, Worksheet } from "@jspreadsheet/react";
import jspreadsheet from "jspreadsheet";
import render from "@jspreadsheet/render";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
// Add-on for your JSS data grid
jspreadsheet.setExtensions({ render });
export default function App() {
// Spreadsheet array of worksheets
const spreadsheet = useRef();
const download = function() {
jspreadsheet.render(spreadsheet.current[0].parent.el, {
filename: 'file.xlsx',
});
}
// Render component
return (
<>
<Spreadsheet ref={spreadsheet}>
<Worksheet />
<Worksheet />
</Spreadsheet>
<input type="button" value="Generate XLSX" onClick={() => download()} />
</>
);
}
<template>
<Spreadsheet ref="spreadsheet" :license="license" :extensions="extensions">
<Worksheet :minDimensions="[10,10]" />
<Worksheet :minDimensions="[10,10]" />
</Spreadsheet>
<input type="button" value="Generate XLSX" @click="download" />
</template>
<script>
import { Spreadsheet, Worksheet, jspreadsheet } from "@jspreadsheet/vue";
import render from "@jspreadsheet/render";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
// Define the data grid license
const license = 'ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==';
// Define the data grid extensions
const extensions = { render };
export default {
components: {
Spreadsheet,
Worksheet,
},
methods: {
download() {
// Spreadsheet instance
jspreadsheet.render(this.$refs.spreadsheet.current[0].parent.el, {
filename: 'file.xlsx',
});
}
},
data() {
const spreadsheet = ref(null);
return {
spreadsheet,
license,
extensions,
};
}
}
</script>
import { Component, ViewChild, ElementRef } from "@angular/core";
import jspreadsheet from "jspreadsheet";
import render from "@jspreadsheet/render";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
// Extensions
jspreadsheet.setExtensions({ render });
@Component({
standalone: true,
selector: "app-root",
template: "<div #spreadsheet></div><input type=\"button\" value=\"Generate XLSX\" (click)=\"this.export()\" />"
})
export class AppComponent {
@ViewChild("spreadsheet") spreadsheet: ElementRef;
// Worksheets
worksheets: jspreadsheet.worksheetInstance[];
// Create a new data grid
ngAfterViewInit() {
// Create spreadsheet
this.worksheets = jspreadsheet(this.spreadsheet.nativeElement, {
worksheets: [
{ minDimensions: [4, 3] },
{ minDimensions: [4, 3] }
]
});
}
export() {
// Spreadsheet instance
jspreadsheet.render(this.worksheets[0].parent.el, {
filename: 'file.xlsx',
});
}
}
formulas
Sheet6
Sort smallest to largest
Sort largest to smallest
addchart
Insert chart
Chart settings
- Configuration
- Styling
add
Area Chart
Stacked Area Chart
100% Stacked Area Chart
Bar Chart
Stacked Bar Chart
100% Stacked Bar Chart
Column Chart
Stacked Column Chart
100% Stacked Column Chart
Line
Histogram
Pareto
Pie
Doughnut
Radar
Filled radar
Bubble
Horizontal
Vertical
Top
Bottom
Left
Right
Top
Bottom
Left
Right
rule
Validations
Warning message
Reject entry
Format style
Number
Text
Date
Time
List
Text length
Cell is empty
Cell is not empty
Formula
between
is not between
less than
less than or equal to
bigger than
bigger than or equal to
equal to
different to
S
M
T
W
T
F
S
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
:
S
M
T
W
T
F
S
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
:
Formatting Options
- Grid
- Spectrum
add
- Grid
- Spectrum
add
Back
interests
Insert Shape
interests
Shape Settings
- Grid
- Spectrum
add
- Grid
- Spectrum
add
0
1
2
3
4
5
6
7
8
- Grid
- Spectrum
add
print
Print
Scope:
Current worksheet
Current worksheet
Spreadsheet
Selected cells
Page size:
A4
Letter
Tabloid
Legal
A3
A4
A5
B4
B5
Page orientation:
Landscape
Portrait
Landscape
Scale:
Normal (100%)
Normal (100%)
Fit to one page
Fit to width
Fit to height
Margins:
Normal
Narrow
Normal
Wide
Order of pages:
Left to right
Left to right
Top to bottom
Horizontal alignment:
Center
Left
Center
Right
Vertical alignment:
Center
Top
Center
Bottom
Search and replace
Find | |
Replace by | |
Search | |
A | B | C | D | |
---|---|---|---|---|
1 | 1 | 33 | ||
2 | 2 | 400 | ||
3 | 10 | |||
4 | 20 |
<html>
<script src="https://jspreadsheet.com/v11/jspreadsheet.js"></script>
<script src="https://jsuites.net/v5/jsuites.js"></script>
<link rel="stylesheet" href="https://jspreadsheet.com/v11/jspreadsheet.css" type="text/css" />
<link rel="stylesheet" href="https://jsuites.net/v5/jsuites.css" type="text/css" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />
<script src="https://cdn.jsdelivr.net/npm/@jspreadsheet/formula-pro/dist/index.min.js"></script>
<div id='spreadsheet'></div>
<script>
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
// Add-on for JSpreadsheet
jspreadsheet.setExtensions({ formula });
// Create the spreadsheets
jspreadsheet(document.getElementById('spreadsheet'), {
worksheets: [{
minDimensions: [4, 4],
data: [
['1', '=SUM(A1:A4)'],
['2', '=PRODUCT(A1:A4)'],
['10', ''],
['20', ''],
]
}],
});
</script>
</html>
import React, { useRef } from "react";
import { Spreadsheet, Worksheet, jspreadsheet } from "@jspreadsheet/react";
import formula from "@jspreadsheet/formula-pro";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
// Add-on for JSpreadsheet
jspreadsheet.setExtensions({ formula });
export default function App() {
// Spreadsheet array of worksheets
const spreadsheet = useRef();
const data = [
['1', '=SUM(A1:A4)'],
['2', '=PRODUCT(A1:A4)'],
['10', ''],
['20', ''],
]
// Render component
return (
<Spreadsheet ref={spreadsheet}>
<Worksheet minDimensions={[5, 5]} data={data} />
</Spreadsheet>
);
}
<template>
<Spreadsheet ref="spreadsheet">
<Worksheet :data="data" :minDimensions="[5,5]" />
</Spreadsheet>
</template>
<script>
import { Spreadsheet, Worksheet, jspreadsheet } from "@jspreadsheet/vue";
import formula from "@jspreadsheet/formula-pro";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
// License
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
// Extensions
jspreadsheet.setExtensions({ formula });
export default {
components: {
Spreadsheet,
Worksheet,
},
data() {
// Data
const data = [
['1', '=SUM(A1:A4)'],
['2', '=PRODUCT(A1:A4)'],
['10', ''],
['20', ''],
]
return {
data,
};
}
}
</script>
import { Component, ViewChild, ElementRef } from "@angular/core";
import jspreadsheet from "jspreadsheet";
import formula from "@jspreadsheet/formula-pro";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
// Set your JSS license key (The following key only works for one day)
jspreadsheet.setLicense('ZTNhZjY5MmNiYzk1MGNjNjQ0NmVhODVlOTk3YjBlZDA1Y2U5NDg4ZDYwOWJiY2M0NGViZmU4YmI4ZGRjMjNjZWJmNjgwMmE4OGM0ZTMzYTU4Y2QyNWQwMGY4ZDU4YjZiYjQxZDdiZDJhYTAzOTE0NmRmNGVlNWNkZmE3YmY5NDUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpRM05qTXhNRGc1TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0ozWldJaUxDSnNiMk5oYkdodmMzUWlYU3dpY0d4aGJpSTZJak0wSWl3aWMyTnZjR1VpT2xzaWRqY2lMQ0oyT0NJc0luWTVJaXdpZGpFd0lpd2lkakV4SWl3aVkyaGhjblJ6SWl3aVptOXliWE1pTENKbWIzSnRkV3hoSWl3aWNHRnljMlZ5SWl3aWNtVnVaR1Z5SWl3aVkyOXRiV1Z1ZEhNaUxDSnBiWEJ2Y25SbGNpSXNJbUpoY2lJc0luWmhiR2xrWVhScGIyNXpJaXdpYzJWaGNtTm9JaXdpY0hKcGJuUWlMQ0p6YUdWbGRITWlMQ0pqYkdsbGJuUWlMQ0p6WlhKMlpYSWlMQ0p6YUdGd1pYTWlYU3dpWkdWdGJ5STZkSEoxWlgwPQ==');
// Extensions
jspreadsheet.setExtensions({ formula });
@Component({
standalone: true,
selector: "app-root",
template: "<div #spreadsheet></div>"
})
export class AppComponent {
@ViewChild("spreadsheet") spreadsheet: ElementRef;
// Worksheets
worksheets: jspreadsheet.worksheetInstance[];
// Create a new data grid
ngAfterViewInit() {
// Create spreadsheet
this.worksheets = jspreadsheet(this.spreadsheet.nativeElement, {
worksheets: [{
data: [
['1', '=SUM(A1:A4)'],
['2', '=PRODUCT(A1:A4)'],
['10', ''],
['20', ''],
],
}],
});
}
}
Fully customizable JavaScript spreadsheet library, offering various components to enhance web development projects. Apply CSS directly to the cells Customise your spreadsheet with multiple worksheets Convert XLSX files to JSON format Convert your data grids and spreadsheets into XLSX files A plugin that can parse Excel-like formulasA complete solution to make rich and user-friendly web applications
Spreadsheet StyleWorksheetsImport from XLSXExport to XLSXFormula Pro
This feature is available on the Ultimate plan
Enhance Your JavaScript Data Grid with AI
Incorporate ChatGPT API or Llama into your web-based data grids to enable automated content generation and advanced data analysis. When paired with Jspreadsheet Server, this powerful integration empowers real-time data queries directly from the front end, connecting to your back-end API to deliver instant insights and responses to users.

JavaScript Data Grid with Full-Stack Capabilities
Unlock real-time collaboration, new ways to implement persistence, automation, non-consecutive selections, advanced multi-copy handling, optimized array operations, and robust privacy controls.
Jspreadsheet allows you to integrate your spreadsheet with other plugins to create rich applications.
Just 0.3 Mb. Jspreadsheet is designed to be lean and efficient, making it a breeze to integrate into your application.
Different methods, events, and features to help with the backend data persistence.
What Our Customers Are Saying
Jspreadsheet reduces our customers’ development time. Here are some of their experiences.
Lucas Segers
“At SplitC we struggled sometimes when users wanted to bulk insert/edit things (sometimes over 100k rows) and we needed performance Jspreadsheet is probably the fastest spreadsheet component you’ll find out there, and with a small bundle size. By the way, support is awesome.”

Lode Cools
“We vetted 10 JavaScript components and we must say that Jspreadsheet comes out as the best.”

Dana Stoesz
“The latest version of Jspreadsheet is a powerful data grid tool, providing an excellent front end for our spreadsheet interface. The Jspreadsheet team is helpful and quick to respond.”

What is Jspreadsheet?
Jspreadsheet is a robust full-stack JavaScript Data Grid solution that directly integrates the functionality and user-friendly experience of spreadsheet applications like Excel and Google Sheets into your web applications. It offers a smooth, efficient user interface, enabling batch actions, table manipulation, and a host of other features that ensure flawless compatibility between your web application and Excel/Sheets. This familiar environment enhances productivity, simplifies user adoption, and minimizes the need for extensive training.
More than just a JS data grid component, Jspreadsheet is a comprehensive solution designed to meet a variety of application requirements in spreadsheet and data management for web platforms. It optimizes workflow development, streamlines process automation, and facilitates the smooth transition of tasks from Excel to the web. Additionally, Jspreadsheet provides a wide range of extensions to address diverse needs within the data grid and spreadsheet ecosystem, making it a versatile choice for various business applications.
More than just a JS data grid component, Jspreadsheet is a comprehensive solution designed to meet a variety of application requirements in spreadsheet and data management for web platforms. It optimizes workflow development, streamlines process automation, and facilitates the smooth transition of tasks from Excel to the web. Additionally, Jspreadsheet provides a wide range of extensions to address diverse needs within the data grid and spreadsheet ecosystem, making it a versatile choice for various business applications.
How to generate my license key?
You will register the base domain (Valid for any subdomain).
So, if you add to your profile, let’s say:
mycompany.com
Any subdomain will be valid:
www.mycompany.com
dev.mycompany.com
Press save; a new certificate will be generated.
You can also add the IP to the authorised domains box and save your profile, and a new certificate will be generated with the IP address.
The local host is already included.
So, if you add to your profile, let’s say:
mycompany.com
Any subdomain will be valid:
www.mycompany.com
dev.mycompany.com
Press save; a new certificate will be generated.
You can also add the IP to the authorised domains box and save your profile, and a new certificate will be generated with the IP address.
The local host is already included.
How to renew my license key?
Your license key is valid for one year and works offline. To ensure continued use, you’ll need to renew and replace it in your deployment after the year has elapsed. You can generate a new license key at any time through your profile, even before the current license expires. Important: Your old license key will remain valid until its expiration date, allowing you to transition to the new key smootliney without any interruption in service.
To renew your license, please follow these steps:
Go to your profile at https://jspreadsheet.com/me/profile.
Click on “Renew License.”
Scroll down to the bottom of the page and click “Save.”
Copy the new certificate key and replace the old one in your code with this updated key.
To renew your license, please follow these steps:
Go to your profile at https://jspreadsheet.com/me/profile.
Click on “Renew License.”
Scroll down to the bottom of the page and click “Save.”
Copy the new certificate key and replace the old one in your code with this updated key.
Try it for free
The free trial certificate is valid for 30 days. If you need additional time for testing,
kindly inform us, and we will extend the period for you.
kindly inform us, and we will extend the period for you.