背景
很多用户的场景中往往数据比较分散,可能在多个工作簿中,因此需要将多个工作簿做一个整合,之前有文章展示了如何在SpreadJS中合并工作簿:https://gcdn.grapecity.com.cn/showtopic-93624-1-22.html
本篇文章则面向用户更加实际的场景,如何批量上传文件的同时,合并工作簿,方法也很简单,只要批量调用spread的open/import方法,然后执行之前合并工作簿的逻辑即可。这里需要注意的是,往往合并工作簿之后会有后续的逻辑行为,而spread的import以及open方法是异步的,因此需要继续宁对应的异步处理,便于之后的逻辑运行
核心方法
- async function importExcelFile(file, i, temp, spread) {
- return new Promise((resolve, reject) => {
- temp.import(file, function (json) {
- // 重命名样式表
- temp.getNamedStyles().forEach(function (namedStyle) {
- namedStyle.name = "sc" + i + "_" + namedStyle.name;
- spread.addNamedStyle(namedStyle);
- });
- var sheetCount = temp.getSheetCount();
- for (let j = 0; j < sheetCount; j++) {
- let sheet = temp.getSheet(j);
- let sheetJSON = JSON.stringify(sheet.toJSON());
- sheetJSON = sheetJSON.replace(/"style":"/g, '"style":"sc' + i + "_");
- // 如果存在parentName,则添加以下代码:
- // sheetJSON = sheetJSON.replace(/"parentName":"/g, '"parentName":"sc' + i + "_");
- spread.suspendPaint();
- var newSheet = new GC.Spread.Sheets.Worksheet("sheet" + i + "_");
- newSheet.fromJSON(JSON.parse(sheetJSON));
- newSheet.name(newSheet.name() + i + "_" + j);
- spread.addSheet(spread.getSheetCount(), newSheet);
- spread.resumePaint();
- }
- resolve();
- }, function (message) {
- console.error(message);
- reject();
- });
- });
- }
复制代码
Demo
批量合并多个Spread(带授权版).html
(6.92 KB, 下载次数: 3)
|
|