找回密码
 立即注册

QQ登录

只需一步,快速开始

Lynn.Dou 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-2-28 11:07  /   查看:2819  /  回复:0
背景:
在此前的教程中我们有介绍如何将两个工作簿(spread)拼接为一个工作簿
还未了解的小伙伴可以先点击下方链接学习:
https://gcdn.grapecity.com.cn/fo ... 4&fromuid=59119

有小伙伴提出了新的需求:
通过SpreadJS创建模板后,如果再导入新的excel文件,会发现导入的excel文件会将原有的模板“覆盖了”。
有没有办法实现,导入的excel文件不直接覆盖原先的模板,而是在模板的后面进行追加sheet呢?

先解释下出现这个问题的原因,不管是excel文件也好,spread创建的模板也好,本质上就是一个工作簿。
导入新的工作簿之后,就会将原有的工作簿进行替换,这是设计使然,也是与Excel保持一致的。
那提出的需求可以实现吗?让我们一起来探索下:

思路:
前面提到,既然导入新的工作簿后会将原有的spread进行替换,
那我们就再导入excel文件后,新建一个临时spread(不直接使用原spread),用于获取导入excel文件的sheet json信息,再在原先spread基础上进行拼接sheet。

主要代码:
  1. var newSpread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'));
  2.                     newSpread.fromJSON(workbookObj);
  3.                     
  4.                     var i = 0;
  5.                     // 将 newSpread 的命名样式合并在spread上
  6.                     newSpread.getNamedStyles().forEach(function (namedStyle) {
  7.                         namedStyle.name = "sc" + i + "_" + namedStyle.name;
  8.                         spread.addNamedStyle(namedStyle);
  9.                     });

  10.                     // 将 newSpread 的sheet拼接在spread sheet后
  11.                     var sheetCount = newSpread.getSheetCount();
  12.                     for(let j=0; j<sheetCount; j++){
  13.                         let sheet = newSpread.getSheet(j);
  14.                         let sheetJSON = JSON.stringify(sheet.toJSON());

  15.                         sheetJSON = sheetJSON.replace(/"style":"/g, '"style":"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.                     }
复制代码


完整代码请参考附件demo,测试步骤:
运行demo后导入测试的excel文件,观察sheet变化。

demo.html

12.91 KB, 下载次数: 83

0 个回复

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