批量合并工作簿
背景很多用户的场景中往往数据比较分散,可能在多个工作簿中,因此需要将多个工作簿做一个整合,之前有文章展示了如何在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
页:
[1]