gridjs-spreadsheet 24.12.0 → 25.1.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/{9ab1b217edd126e8925e88cc8f25a154.svg → 555f60323063f2b68b6eac7ce9c45b19.svg} +88 -88
- package/{2922578eabb1a88d1974da56c65189ba.svg → a3b683289420fd8ec937908397907279.svg} +907 -907
- package/example/.classpath +41 -0
- package/example/.project +23 -0
- package/example/Dockerfile +53 -0
- package/example/HELP.md +34 -0
- package/example/README.md +35 -0
- package/example/compose.yaml +1 -0
- package/example/mvnw +250 -0
- package/example/mvnw.cmd +146 -0
- package/example/pom.xml +118 -0
- package/example/src/main/java/com/aspose/gridjs/demo/GridjsdemoApplication.java +91 -0
- package/example/src/main/java/com/aspose/gridjs/demo/LocalFileCache.java +92 -0
- package/example/src/main/java/com/aspose/gridjs/demo/ModifyMonitor.java +21 -0
- package/example/src/main/java/com/aspose/gridjs/demo/controller/DataController.java +128 -0
- package/example/src/main/java/com/aspose/gridjs/demo/controller/GridJs2Controller.java +558 -0
- package/example/src/main/resources/application.properties +17 -0
- package/example/src/main/resources/static/xspread/555f60323063f2b68b6eac7ce9c45b19.svg +88 -0
- package/example/src/main/resources/static/xspread/a3b683289420fd8ec937908397907279.svg +907 -0
- package/example/src/main/resources/static/xspread/bootstrap.min.22.5.5.2.css +1 -0
- package/example/src/main/resources/static/xspread/content/img/20130527034914143.gif +0 -0
- package/example/src/main/resources/static/xspread/content/img/20130527034914229.gif +0 -0
- package/example/src/main/resources/static/xspread/content/img/20130527034916363.gif +0 -0
- package/example/src/main/resources/static/xspread/content/img/20130527034917946.gif +0 -0
- package/example/src/main/resources/static/xspread/content/img/20130527034918372.gif +0 -0
- package/example/src/main/resources/static/xspread/content/img/loading.gif +0 -0
- package/example/src/main/resources/static/xspread/content/img/testupdating.gif +0 -0
- package/example/src/main/resources/static/xspread/content/img/testupdating1.png +0 -0
- package/example/src/main/resources/static/xspread/content/img/updating.gif +0 -0
- package/example/src/main/resources/static/xspread/jquery-2.1.1.js +9190 -0
- package/example/src/main/resources/static/xspread/jquery-ui.min.css +7 -0
- package/example/src/main/resources/static/xspread/jquery-ui.min.js +6 -0
- package/example/src/main/resources/static/xspread/jszip.min.js +13 -0
- package/example/src/main/resources/static/xspread/xspreadsheet.css +1953 -0
- package/example/src/main/resources/static/xspread/xspreadsheet.js +21 -0
- package/example/src/main/resources/templates/fileFromUpload.html +297 -0
- package/example/src/main/resources/templates/index.html +296 -0
- package/example/src/main/resources/templates/list.html +98 -0
- package/example/wb/Sales Report.xlsx +0 -0
- package/example/wb/SampleFile2.xlsx +0 -0
- package/example/wb/TextBoxExample.xlsx +0 -0
- package/example/wb/chart.xlsx +0 -0
- package/example/wb/controls.xlsx +0 -0
- package/example/wb/studenttop.xlsx +0 -0
- package/example/wb/to-do-list.xlsx +0 -0
- package/package.json +1 -1
- package/preview.gif +0 -0
- package/readme.md +42 -8
- package/xspreadsheet.css +27 -3
- package/xspreadsheet.js +5 -5
- package/package.json.bak +0 -52
- package/readme.md.bak +0 -246
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width" />
|
|
6
|
+
<title>gridjs-web-demo</title>
|
|
7
|
+
|
|
8
|
+
<style>
|
|
9
|
+
::-webkit-scrollbar, ::-webkit-scrollbar-button {
|
|
10
|
+
width: 8px;
|
|
11
|
+
height: 8px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
::-webkit-scrollbar-track {
|
|
15
|
+
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
|
|
16
|
+
border-radius: 10px;
|
|
17
|
+
background-color: #FFF;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
::-webkit-scrollbar-thumb {
|
|
21
|
+
border-radius: 10px;
|
|
22
|
+
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
|
|
23
|
+
background-color: #AAA;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
html, body {
|
|
27
|
+
margin: 0;
|
|
28
|
+
padding: 0;
|
|
29
|
+
width: 100%;
|
|
30
|
+
height: 100%;
|
|
31
|
+
display: flex;
|
|
32
|
+
flex-direction: column;
|
|
33
|
+
overflow: hidden;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.container {
|
|
37
|
+
flex: 1;
|
|
38
|
+
overflow: hidden;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.big-div, canvas {
|
|
42
|
+
width: 100%;
|
|
43
|
+
height: 100%;
|
|
44
|
+
object-fit: contain; /* 对于图像或视频很有用 */
|
|
45
|
+
}
|
|
46
|
+
</style>
|
|
47
|
+
<!--<link rel="stylesheet" href="./quantumui.min.22.5.5.2.css?v=20220312" />-->
|
|
48
|
+
<link rel="stylesheet" href="/xspread/bootstrap.min.22.5.5.2.css?v=20220315" />
|
|
49
|
+
<script src="/xspread/jquery-2.1.1.js"></script>
|
|
50
|
+
<link rel="stylesheet" href="/xspread/jquery-ui.min.css" />
|
|
51
|
+
<script src="/xspread/jquery-ui.min.js"></script>
|
|
52
|
+
<script src="/xspread/jszip.min.js"></script>
|
|
53
|
+
<!-- <script src="vconsole.min.js"></script> -->
|
|
54
|
+
<!--for local reference-->
|
|
55
|
+
<link rel="stylesheet" href="/xspread/xspreadsheet.css?v=20230525" />
|
|
56
|
+
<script src="/xspread/xspreadsheet.js?v=20230525"></script>
|
|
57
|
+
|
|
58
|
+
<!--for release reference-->
|
|
59
|
+
<!-- <link rel="stylesheet" href="https://unpkg.com/gridjs-spreadsheet@24.12.0/xspreadsheet.css">
|
|
60
|
+
<script src="https://unpkg.com/gridjs-spreadsheet@24.12.0/xspreadsheet.js"></script> -->
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
</head>
|
|
66
|
+
|
|
67
|
+
<body>
|
|
68
|
+
<!--<div style="height:300px"></div>
|
|
69
|
+
<div style="height:300px"></div>-->
|
|
70
|
+
<div id="gridjs-demo-uid"></div>
|
|
71
|
+
<div id="status"></div>
|
|
72
|
+
|
|
73
|
+
<script>
|
|
74
|
+
|
|
75
|
+
function vtrace() {
|
|
76
|
+
let stack = (new Error()).stack
|
|
77
|
+
console.log(stack);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
let xs;
|
|
83
|
+
let rdata;
|
|
84
|
+
let uniqueid = '[[${uid}]]';
|
|
85
|
+
//var local = 'http://localhost:24262';
|
|
86
|
+
let imagediv = 'imagedive';
|
|
87
|
+
let basiczorder = 5678;
|
|
88
|
+
let sheets = [];
|
|
89
|
+
let jsondata = null;
|
|
90
|
+
$(function () {
|
|
91
|
+
|
|
92
|
+
$.ajax({
|
|
93
|
+
|
|
94
|
+
// url: '/GridJs2/DetailFileJsonWithUid?filename=' + '[[${file}]]' + '&uid=' + uniqueid,
|
|
95
|
+
url: '/GridJs2/DetailStreamJsonWithUidFromUpload?filename=' + '[[${file}]]' + '&uid=' + uniqueid,
|
|
96
|
+
|
|
97
|
+
type: 'GET',
|
|
98
|
+
|
|
99
|
+
dataType: 'text',
|
|
100
|
+
|
|
101
|
+
timeout: 59000,
|
|
102
|
+
|
|
103
|
+
cache: false,
|
|
104
|
+
|
|
105
|
+
beforeSend: LoadFunction,
|
|
106
|
+
|
|
107
|
+
error: erryFunction,
|
|
108
|
+
|
|
109
|
+
success: succFunction,
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
function LoadFunction() {
|
|
113
|
+
$('#status').html('loading...');
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function erryFunction() {
|
|
117
|
+
alert('error');
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function succFunction(tt) {
|
|
121
|
+
$('#status').html('success');
|
|
122
|
+
|
|
123
|
+
var exceldata = tt;
|
|
124
|
+
//.replace(/\n/g,"\\\\n");
|
|
125
|
+
jsondata = JSON.parse(exceldata);
|
|
126
|
+
if (jsondata.Error) {
|
|
127
|
+
alert(jsondata.Error);
|
|
128
|
+
} else {
|
|
129
|
+
loadNormalContext(jsondata);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
const loadNormalContext = (sheet) => {
|
|
138
|
+
const option = {
|
|
139
|
+
updateMode: 'server',
|
|
140
|
+
updateUrl: '/GridJs2/UpdateCell',
|
|
141
|
+
showToolbar: true,
|
|
142
|
+
|
|
143
|
+
// showFileName:false,
|
|
144
|
+
//showGrid: true,
|
|
145
|
+
//mode: 'edit',
|
|
146
|
+
mode: 'edit',
|
|
147
|
+
//support multiple language ,the locale is: en zh es pt de ru nl
|
|
148
|
+
local: 'en',
|
|
149
|
+
loadingGif:'/xspread/content/img/updating.gif',
|
|
150
|
+
};
|
|
151
|
+
loadWithOption(jsondata, option);
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
function loadWithOption(jsondata, option) {
|
|
156
|
+
$('#gridjs-demo-uid').empty();
|
|
157
|
+
//record uniqueid
|
|
158
|
+
uniqueid = jsondata.uniqueid;
|
|
159
|
+
sheets = jsondata.data;
|
|
160
|
+
const filename = jsondata.filename;
|
|
161
|
+
const fileDownloadUrl = "/GridJs2/Download";
|
|
162
|
+
const oleDownloadUrl = "/GridJs2/Ole";
|
|
163
|
+
const imageurl = "/GridJs2/ImageUrl";
|
|
164
|
+
const imageuploadurl1 = "/GridJs2/AddImage";
|
|
165
|
+
const imageuploadurl2 = "/GridJs2/AddImageByURL";
|
|
166
|
+
const imagecopyurl = "/GridJs2/CopyImage"; // x.spreadsheet.locale('zh-cn');
|
|
167
|
+
const lazyLoadingUrl = "/GridJs2/LazyLoading";
|
|
168
|
+
xs = x_spreadsheet('#gridjs-demo-uid', option).loadData(sheets).change((cdata) => {
|
|
169
|
+
console.log(cdata);
|
|
170
|
+
console.log(xs.validate());
|
|
171
|
+
}
|
|
172
|
+
).updateServerError((xhr, textStatus, errorThrown) => {
|
|
173
|
+
const s = ("error---") + ("code:" + xhr.status) + ("state:" + xhr.readyState) + ("msg:" + xhr.statusText) + ("text:" + xhr.responseText) + ("request status:" + textStatus) + (errorThrown);
|
|
174
|
+
console.log(s);
|
|
175
|
+
|
|
176
|
+
}).updateCellError((msg) => {
|
|
177
|
+
|
|
178
|
+
console.error(msg);
|
|
179
|
+
// xs.sheet.data.restoreLastCell();
|
|
180
|
+
alert(msg);
|
|
181
|
+
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
if (!jsondata.showtabs) {
|
|
185
|
+
xs.bottombar.hide();
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
xs.on('cell-selected', (cell, ri, ci) => {
|
|
189
|
+
console.log('cell selected:', cell, ', ri:', ri, ', ci:', ci);
|
|
190
|
+
if (ci === -1) {
|
|
191
|
+
console.log('ci === -1 means a row selected ', ri);
|
|
192
|
+
}
|
|
193
|
+
if (ri === -1) {
|
|
194
|
+
console.log('ri === -1 means a column selected', ci);
|
|
195
|
+
}
|
|
196
|
+
}).on('cells-selected', (cell, range) => {
|
|
197
|
+
console.log('range selected:', cell, ', rang:', range);
|
|
198
|
+
|
|
199
|
+
}).on('object-selected', (obj) => {
|
|
200
|
+
console.log('obj selected id:', obj.id, ', type: ', obj.type);
|
|
201
|
+
}).on('sheet-selected', (id, name) => {
|
|
202
|
+
console.log('sheet selected id:', id, ', name: ', name);
|
|
203
|
+
}).on('sheet-loaded', (id, name) => {
|
|
204
|
+
console.log('sheet is loaded id:', id, ', name: ', name);
|
|
205
|
+
}).on('cell-edited', (text, ri, ci) => {
|
|
206
|
+
console.log('text:', text, ', ri: ', ri, ', ci:', ci);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
xs.setUniqueId(uniqueid);
|
|
212
|
+
xs.setFileName(filename);
|
|
213
|
+
// xs.setImageInfo(imageurl, imageuploadurl1, imageuploadurl2, imagecopyurl, basiczorder, 'content/img/loading.gif');
|
|
214
|
+
xs.setImageInfo(imageurl, imageuploadurl1, imageuploadurl2, imagecopyurl, basiczorder);
|
|
215
|
+
xs.setFileDownloadInfo(fileDownloadUrl);
|
|
216
|
+
xs.setOleDownloadInfo(oleDownloadUrl);
|
|
217
|
+
//lazy loading
|
|
218
|
+
xs.setLazyLoadingUrl(lazyLoadingUrl);
|
|
219
|
+
xs.setOpenFileUrl("/gridjsdemo/list");
|
|
220
|
+
|
|
221
|
+
let activeSheetName = jsondata.actname;
|
|
222
|
+
|
|
223
|
+
if (xs.bottombar.dataNames.indexOf(activeSheetName) >= 0) {
|
|
224
|
+
xs.setActiveSheetByName(activeSheetName).setActiveCell(jsondata.actrow, jsondata.actcol);
|
|
225
|
+
|
|
226
|
+
} else {
|
|
227
|
+
//some times if the active sheet is invisible or chartworksheet ,just use the first worksheet
|
|
228
|
+
activeSheetName = xs.bottombar.dataNames[0];
|
|
229
|
+
xs.setActiveSheetByName(activeSheetName).setActiveCell(0, 0);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function ColorReverse(OldColorValue) {
|
|
236
|
+
var OldColorValue = '0x' + OldColorValue.replace(/#/g, "");
|
|
237
|
+
var str = '000000' + (0xFFFFFF - OldColorValue).toString(16);
|
|
238
|
+
return '#' + str.substring(str.length - 6, str.length);
|
|
239
|
+
}
|
|
240
|
+
function save() {
|
|
241
|
+
if (!xs.buffer.isFinish()) {
|
|
242
|
+
alert('updating is inprogress,please try later');
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
let datas = xs.datas;
|
|
246
|
+
delete datas.history;
|
|
247
|
+
delete datas.search;
|
|
248
|
+
delete datas.images;
|
|
249
|
+
delete datas.shapes;
|
|
250
|
+
|
|
251
|
+
var jsondata = {
|
|
252
|
+
sheetname: xs.sheet.data.name,
|
|
253
|
+
actrow: xs.sheet.data.selector.ri,
|
|
254
|
+
actcol: xs.sheet.data.selector.ci,
|
|
255
|
+
datas: xs.getUpdateDatas(),
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
const data = {
|
|
259
|
+
p: JSON.stringify(jsondata),
|
|
260
|
+
uid: uniqueid,
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
$.ajax({
|
|
265
|
+
url: local + '/GridJs2/Download',
|
|
266
|
+
type: 'post',
|
|
267
|
+
|
|
268
|
+
data: data,
|
|
269
|
+
success: function (datar, stutas, xhr) {
|
|
270
|
+
console.log(datar);
|
|
271
|
+
if (datar.startsWith('{')) {
|
|
272
|
+
var ret = JSON.parse(datar);
|
|
273
|
+
if (ret.err) {
|
|
274
|
+
alert(ret.err);
|
|
275
|
+
}
|
|
276
|
+
} else {
|
|
277
|
+
// window.location = local + '/GridJs2/Download2/' + datar;
|
|
278
|
+
window.location = datar;
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
</script>
|
|
287
|
+
|
|
288
|
+
<div style="display: none;z-index: 999;">
|
|
289
|
+
<div title='text highlight' id="textselectform">
|
|
290
|
+
<div>
|
|
291
|
+
<textarea id='textselect' name='textselect' rows='4' cols='50'>
|
|
292
|
+
</textarea>
|
|
293
|
+
</div>
|
|
294
|
+
</div>'
|
|
295
|
+
</div>
|
|
296
|
+
</body>
|
|
297
|
+
</html>
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width" />
|
|
6
|
+
<title>gridjs-web-demo</title>
|
|
7
|
+
|
|
8
|
+
<style>
|
|
9
|
+
::-webkit-scrollbar, ::-webkit-scrollbar-button {
|
|
10
|
+
width: 8px;
|
|
11
|
+
height: 8px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
::-webkit-scrollbar-track {
|
|
15
|
+
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
|
|
16
|
+
border-radius: 10px;
|
|
17
|
+
background-color: #FFF;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
::-webkit-scrollbar-thumb {
|
|
21
|
+
border-radius: 10px;
|
|
22
|
+
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
|
|
23
|
+
background-color: #AAA;
|
|
24
|
+
}
|
|
25
|
+
html, body {
|
|
26
|
+
margin: 0;
|
|
27
|
+
padding: 0;
|
|
28
|
+
width: 100%;
|
|
29
|
+
height: 100%;
|
|
30
|
+
display: flex;
|
|
31
|
+
flex-direction: column;
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.container {
|
|
36
|
+
flex: 1;
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.big-div, canvas {
|
|
41
|
+
width: 100%;
|
|
42
|
+
height: 100%;
|
|
43
|
+
object-fit: contain;
|
|
44
|
+
}
|
|
45
|
+
</style>
|
|
46
|
+
<!--<link rel="stylesheet" href="./quantumui.min.22.5.5.2.css?v=20220312" />-->
|
|
47
|
+
<link rel="stylesheet" href="/xspread/bootstrap.min.22.5.5.2.css?v=20220315" />
|
|
48
|
+
<script src="/xspread/jquery-2.1.1.js"></script>
|
|
49
|
+
<link rel="stylesheet" href="/xspread/jquery-ui.min.css" />
|
|
50
|
+
<script src="/xspread/jquery-ui.min.js"></script>
|
|
51
|
+
<script src="/xspread/jszip.min.js"></script>
|
|
52
|
+
<!-- <script src="vconsole.min.js"></script> -->
|
|
53
|
+
<!--for local reference-->
|
|
54
|
+
<link rel="stylesheet" href="/xspread/xspreadsheet.css?v=20230525" />
|
|
55
|
+
<script src="/xspread/xspreadsheet.js?v=20230525"></script>
|
|
56
|
+
|
|
57
|
+
<!--for release reference-->
|
|
58
|
+
<!-- <link rel="stylesheet" href="https://unpkg.com/gridjs-spreadsheet@24.12.0/xspreadsheet.css">
|
|
59
|
+
<script src="https://unpkg.com/gridjs-spreadsheet@24.12.0/xspreadsheet.js"></script> -->
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
</head>
|
|
65
|
+
|
|
66
|
+
<body>
|
|
67
|
+
<!--<div style="height:300px"></div>
|
|
68
|
+
<div style="height:300px"></div>-->
|
|
69
|
+
<div id="gridjs-demo-uid"></div>
|
|
70
|
+
<div id="status"></div>
|
|
71
|
+
|
|
72
|
+
<script>
|
|
73
|
+
|
|
74
|
+
function vtrace() {
|
|
75
|
+
let stack = (new Error()).stack
|
|
76
|
+
console.log(stack);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
let xs;
|
|
82
|
+
let rdata;
|
|
83
|
+
let uniqueid = '[[${uid}]]';
|
|
84
|
+
//var local = 'http://localhost:24262';
|
|
85
|
+
let imagediv = 'imagedive';
|
|
86
|
+
let basiczorder = 5678;
|
|
87
|
+
let sheets = [];
|
|
88
|
+
let jsondata = null;
|
|
89
|
+
$(function () {
|
|
90
|
+
|
|
91
|
+
$.ajax({
|
|
92
|
+
|
|
93
|
+
// url: '/GridJs2/DetailFileJsonWithUid?filename=' + '[[${file}]]' + '&uid=' + uniqueid,
|
|
94
|
+
url: '/GridJs2/DetailStreamJsonWithUid?filename=' + '[[${file}]]' + '&uid=' + uniqueid,
|
|
95
|
+
|
|
96
|
+
type: 'GET',
|
|
97
|
+
|
|
98
|
+
dataType: 'text',
|
|
99
|
+
|
|
100
|
+
timeout: 59000,
|
|
101
|
+
|
|
102
|
+
cache: false,
|
|
103
|
+
|
|
104
|
+
beforeSend: LoadFunction,
|
|
105
|
+
|
|
106
|
+
error: erryFunction,
|
|
107
|
+
|
|
108
|
+
success: succFunction,
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
function LoadFunction() {
|
|
112
|
+
$('#status').html('loading...');
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function erryFunction() {
|
|
116
|
+
alert('error');
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function succFunction(tt) {
|
|
120
|
+
$('#status').html('success');
|
|
121
|
+
|
|
122
|
+
var exceldata = tt;
|
|
123
|
+
//.replace(/\n/g,"\\\\n");
|
|
124
|
+
jsondata = JSON.parse(exceldata);
|
|
125
|
+
if (jsondata.Error) {
|
|
126
|
+
alert(jsondata.Error);
|
|
127
|
+
} else {
|
|
128
|
+
loadNormalContext(jsondata);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
const loadNormalContext = (sheet) => {
|
|
137
|
+
const option = {
|
|
138
|
+
updateMode: 'server',
|
|
139
|
+
updateUrl: '/GridJs2/UpdateCell',
|
|
140
|
+
showToolbar: true,
|
|
141
|
+
|
|
142
|
+
// showFileName:false,
|
|
143
|
+
//showGrid: true,
|
|
144
|
+
//mode: 'edit',
|
|
145
|
+
mode: 'edit',
|
|
146
|
+
//support multiple language ,the locale is: en zh es pt de ru nl
|
|
147
|
+
local: 'en',
|
|
148
|
+
loadingGif:'/xspread/content/img/updating.gif',
|
|
149
|
+
};
|
|
150
|
+
loadWithOption(jsondata, option);
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
function loadWithOption(jsondata, option) {
|
|
155
|
+
$('#gridjs-demo-uid').empty();
|
|
156
|
+
//record uniqueid
|
|
157
|
+
uniqueid = jsondata.uniqueid;
|
|
158
|
+
sheets = jsondata.data;
|
|
159
|
+
const filename = jsondata.filename;
|
|
160
|
+
const fileDownloadUrl = "/GridJs2/Download";
|
|
161
|
+
const oleDownloadUrl = "/GridJs2/Ole";
|
|
162
|
+
const imageurl = "/GridJs2/ImageUrl";
|
|
163
|
+
const imageuploadurl1 = "/GridJs2/AddImage";
|
|
164
|
+
const imageuploadurl2 = "/GridJs2/AddImageByURL";
|
|
165
|
+
const imagecopyurl = "/GridJs2/CopyImage"; // x.spreadsheet.locale('zh-cn');
|
|
166
|
+
const lazyLoadingUrl = "/GridJs2/LazyLoading";
|
|
167
|
+
xs = x_spreadsheet('#gridjs-demo-uid', option).loadData(sheets).change((cdata) => {
|
|
168
|
+
console.log(cdata);
|
|
169
|
+
console.log(xs.validate());
|
|
170
|
+
}
|
|
171
|
+
).updateServerError((xhr, textStatus, errorThrown) => {
|
|
172
|
+
const s = ("error---") + ("code:" + xhr.status) + ("state:" + xhr.readyState) + ("msg:" + xhr.statusText) + ("text:" + xhr.responseText) + ("request status:" + textStatus) + (errorThrown);
|
|
173
|
+
console.log(s);
|
|
174
|
+
|
|
175
|
+
}).updateCellError((msg) => {
|
|
176
|
+
|
|
177
|
+
console.error(msg);
|
|
178
|
+
// xs.sheet.data.restoreLastCell();
|
|
179
|
+
alert(msg);
|
|
180
|
+
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
if (!jsondata.showtabs) {
|
|
184
|
+
xs.bottombar.hide();
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
xs.on('cell-selected', (cell, ri, ci) => {
|
|
188
|
+
console.log('cell selected:', cell, ', ri:', ri, ', ci:', ci);
|
|
189
|
+
if (ci === -1) {
|
|
190
|
+
console.log('ci === -1 means a row selected ', ri);
|
|
191
|
+
}
|
|
192
|
+
if (ri === -1) {
|
|
193
|
+
console.log('ri === -1 means a column selected', ci);
|
|
194
|
+
}
|
|
195
|
+
}).on('cells-selected', (cell, range) => {
|
|
196
|
+
console.log('range selected:', cell, ', rang:', range);
|
|
197
|
+
|
|
198
|
+
}).on('object-selected', (obj) => {
|
|
199
|
+
console.log('obj selected id:', obj.id, ', type: ', obj.type);
|
|
200
|
+
}).on('sheet-selected', (id, name) => {
|
|
201
|
+
console.log('sheet selected id:', id, ', name: ', name);
|
|
202
|
+
}).on('sheet-loaded', (id, name) => {
|
|
203
|
+
console.log('sheet is loaded id:', id, ', name: ', name);
|
|
204
|
+
}).on('cell-edited', (text, ri, ci) => {
|
|
205
|
+
console.log('text:', text, ', ri: ', ri, ', ci:', ci);
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
xs.setUniqueId(uniqueid);
|
|
211
|
+
xs.setFileName(filename);
|
|
212
|
+
// xs.setImageInfo(imageurl, imageuploadurl1, imageuploadurl2, imagecopyurl, basiczorder, 'content/img/loading.gif');
|
|
213
|
+
xs.setImageInfo(imageurl, imageuploadurl1, imageuploadurl2, imagecopyurl, basiczorder);
|
|
214
|
+
xs.setFileDownloadInfo(fileDownloadUrl);
|
|
215
|
+
xs.setOleDownloadInfo(oleDownloadUrl);
|
|
216
|
+
//lazy loading
|
|
217
|
+
xs.setLazyLoadingUrl(lazyLoadingUrl);
|
|
218
|
+
xs.setOpenFileUrl("/gridjsdemo/list");
|
|
219
|
+
|
|
220
|
+
let activeSheetName = jsondata.actname;
|
|
221
|
+
|
|
222
|
+
if (xs.bottombar.dataNames.indexOf(activeSheetName) >= 0) {
|
|
223
|
+
xs.setActiveSheetByName(activeSheetName).setActiveCell(jsondata.actrow, jsondata.actcol);
|
|
224
|
+
|
|
225
|
+
} else {
|
|
226
|
+
//some times if the active sheet is invisible or chartworksheet ,just use the first worksheet
|
|
227
|
+
activeSheetName = xs.bottombar.dataNames[0];
|
|
228
|
+
xs.setActiveSheetByName(activeSheetName).setActiveCell(0, 0);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function ColorReverse(OldColorValue) {
|
|
235
|
+
var OldColorValue = '0x' + OldColorValue.replace(/#/g, "");
|
|
236
|
+
var str = '000000' + (0xFFFFFF - OldColorValue).toString(16);
|
|
237
|
+
return '#' + str.substring(str.length - 6, str.length);
|
|
238
|
+
}
|
|
239
|
+
function save() {
|
|
240
|
+
if (!xs.buffer.isFinish()) {
|
|
241
|
+
alert('updating is inprogress,please try later');
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
let datas = xs.datas;
|
|
245
|
+
delete datas.history;
|
|
246
|
+
delete datas.search;
|
|
247
|
+
delete datas.images;
|
|
248
|
+
delete datas.shapes;
|
|
249
|
+
|
|
250
|
+
var jsondata = {
|
|
251
|
+
sheetname: xs.sheet.data.name,
|
|
252
|
+
actrow: xs.sheet.data.selector.ri,
|
|
253
|
+
actcol: xs.sheet.data.selector.ci,
|
|
254
|
+
datas: xs.getUpdateDatas(),
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
const data = {
|
|
258
|
+
p: JSON.stringify(jsondata),
|
|
259
|
+
uid: uniqueid,
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
$.ajax({
|
|
264
|
+
url: local + '/GridJs2/Download',
|
|
265
|
+
type: 'post',
|
|
266
|
+
|
|
267
|
+
data: data,
|
|
268
|
+
success: function (datar, stutas, xhr) {
|
|
269
|
+
console.log(datar);
|
|
270
|
+
if (datar.startsWith('{')) {
|
|
271
|
+
var ret = JSON.parse(datar);
|
|
272
|
+
if (ret.err) {
|
|
273
|
+
alert(ret.err);
|
|
274
|
+
}
|
|
275
|
+
} else {
|
|
276
|
+
// window.location = local + '/GridJs2/Download2/' + datar;
|
|
277
|
+
window.location = datar;
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
</script>
|
|
286
|
+
|
|
287
|
+
<div style="display: none;z-index: 999;">
|
|
288
|
+
<div title='text highlight' id="textselectform">
|
|
289
|
+
<div>
|
|
290
|
+
<textarea id='textselect' name='textselect' rows='4' cols='50'>
|
|
291
|
+
</textarea>
|
|
292
|
+
</div>
|
|
293
|
+
</div>'
|
|
294
|
+
</div>
|
|
295
|
+
</body>
|
|
296
|
+
</html>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width" />
|
|
6
|
+
<title>gridjs-web-demo file list</title>
|
|
7
|
+
|
|
8
|
+
<style>
|
|
9
|
+
body {
|
|
10
|
+
font-family: Arial, sans-serif;
|
|
11
|
+
margin: 0;
|
|
12
|
+
padding: 0;
|
|
13
|
+
background-color: #f4f4f4;
|
|
14
|
+
}
|
|
15
|
+
.container {
|
|
16
|
+
width: 80%;
|
|
17
|
+
margin: auto;
|
|
18
|
+
overflow: hidden;
|
|
19
|
+
}
|
|
20
|
+
header {
|
|
21
|
+
background: #50b3a2;
|
|
22
|
+
color: #ffffff;
|
|
23
|
+
padding-top: 30px;
|
|
24
|
+
min-height: 70px;
|
|
25
|
+
border-bottom: #e8491d 3px solid;
|
|
26
|
+
}
|
|
27
|
+
header h1 {
|
|
28
|
+
text-align: center;
|
|
29
|
+
text-transform: uppercase;
|
|
30
|
+
margin: 0;
|
|
31
|
+
font-size: 24px;
|
|
32
|
+
}
|
|
33
|
+
.upload-form, .file-list {
|
|
34
|
+
background: white;
|
|
35
|
+
padding: 20px;
|
|
36
|
+
margin-top: 20px;
|
|
37
|
+
box-shadow: 0 0 10px rgba(0,0,0,0.1);
|
|
38
|
+
}
|
|
39
|
+
.upload-form input[type="file"], .upload-form button {
|
|
40
|
+
display: block;
|
|
41
|
+
width: 100%;
|
|
42
|
+
margin: 10px 0;
|
|
43
|
+
padding: 10px;
|
|
44
|
+
}
|
|
45
|
+
footer {
|
|
46
|
+
text-align: center;
|
|
47
|
+
padding: 20px;
|
|
48
|
+
background: #50b3a2;
|
|
49
|
+
color: white;
|
|
50
|
+
margin-top: 20px;
|
|
51
|
+
}
|
|
52
|
+
a {
|
|
53
|
+
color: #50b3a2;
|
|
54
|
+
text-decoration: none;
|
|
55
|
+
}
|
|
56
|
+
a:hover {
|
|
57
|
+
color: #e8491d;
|
|
58
|
+
}
|
|
59
|
+
</style>
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
</head>
|
|
63
|
+
|
|
64
|
+
<body>
|
|
65
|
+
<script>
|
|
66
|
+
|
|
67
|
+
function openfile(element) {
|
|
68
|
+
const filename = element.getAttribute('data-filename');
|
|
69
|
+
|
|
70
|
+
const uid = element.getAttribute('data-uid');
|
|
71
|
+
const url = '/gridjsdemo/Uidtml?filename=' + filename+'&uid='+uid;
|
|
72
|
+
window.open(url, "_blank");
|
|
73
|
+
}
|
|
74
|
+
</script>
|
|
75
|
+
<!-- 文件上传表单 -->
|
|
76
|
+
|
|
77
|
+
<div class="upload-form">
|
|
78
|
+
<form method="post" action="/gridjsdemo/upload" enctype="multipart/form-data">
|
|
79
|
+
<!-- accept属性用于限定可接受的文件类型 -->
|
|
80
|
+
<input type="file" name="file" accept=".xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" required/>
|
|
81
|
+
<button type="submit">upload</button>
|
|
82
|
+
</form>
|
|
83
|
+
</div>
|
|
84
|
+
<div class="file-list">
|
|
85
|
+
<h2>choose a file from the navigation path</h2>
|
|
86
|
+
<div th:each="item : ${filelist}">
|
|
87
|
+
<a href="javascript:void(0)" target="_blank" th:data-filename="${item[0]}" th:data-uid="${item[1]}" onclick="openfile(this)">
|
|
88
|
+
<em th:text="${item[0]}"></em>
|
|
89
|
+
</a><br />
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
<footer class="border-top footer text-muted">
|
|
93
|
+
<div class="container">
|
|
94
|
+
© 2025 - Aspose
|
|
95
|
+
</div>
|
|
96
|
+
</footer>
|
|
97
|
+
</body>
|
|
98
|
+
</html>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|