Richard.Huang 发表于 2024-12-24 14:28:53

批量合并工作簿

背景

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