找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Huang SpreadJS 开发认证

超级版主

46

主题

3300

帖子

5168

积分

超级版主

Rank: 8Rank: 8

积分
5168

SpreadJS 认证SpreadJS 高级认证

Richard.Huang SpreadJS 开发认证
超级版主   /  发表于:2024-12-24 14:28  /   查看:51  /  回复:0
背景

很多用户的场景中往往数据比较分散,可能在多个工作簿中,因此需要将多个工作簿做一个整合,之前有文章展示了如何在SpreadJS中合并工作簿:https://gcdn.grapecity.com.cn/showtopic-93624-1-22.html

本篇文章则面向用户更加实际的场景,如何批量上传文件的同时,合并工作簿,方法也很简单,只要批量调用spread的open/import方法,然后执行之前合并工作簿的逻辑即可。这里需要注意的是,往往合并工作簿之后会有后续的逻辑行为,而spread的import以及open方法是异步的,因此需要继续宁对应的异步处理,便于之后的逻辑运行

核心方法
  1. async function importExcelFile(file, i, temp, spread) {
  2.     return new Promise((resolve, reject) => {
  3.         temp.import(file, function (json) {
  4.             // 重命名样式表
  5.             temp.getNamedStyles().forEach(function (namedStyle) {
  6.                 namedStyle.name = "sc" + i + "_" + namedStyle.name;
  7.                 spread.addNamedStyle(namedStyle);
  8.             });

  9.             var sheetCount = temp.getSheetCount();
  10.             for (let j = 0; j < sheetCount; j++) {
  11.                 let sheet = temp.getSheet(j);
  12.                 let sheetJSON = JSON.stringify(sheet.toJSON());

  13.                 sheetJSON = sheetJSON.replace(/"style":"/g, '"style":"sc' + i + "_");
  14.                 // 如果存在parentName,则添加以下代码:
  15.                 // sheetJSON = sheetJSON.replace(/"parentName":"/g, '"parentName":"sc' + i + "_");
  16.                 spread.suspendPaint();
  17.                 var newSheet = new GC.Spread.Sheets.Worksheet("sheet" + i + "_");
  18.                 newSheet.fromJSON(JSON.parse(sheetJSON));
  19.                 newSheet.name(newSheet.name() + i + "_" + j);
  20.                 spread.addSheet(spread.getSheetCount(), newSheet);
  21.                 spread.resumePaint();
  22.             }
  23.             resolve();
  24.         }, function (message) {
  25.             console.error(message);
  26.             reject();
  27.         });
  28.     });
  29. }
复制代码

Demo
批量合并多个Spread(带授权版).html (6.92 KB, 下载次数: 3)

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部