找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Huang SpreadJS 开发认证

超级版主

43

主题

3222

帖子

4999

积分

超级版主

Rank: 8Rank: 8

积分
4999

SpreadJS 认证SpreadJS 高级认证

Richard.Huang SpreadJS 开发认证
超级版主   /  发表于:2024-5-22 18:08  /   查看:927  /  回复:0
背景
在某些行业会会用到一些复杂的形状去实现业务的处理,例如汽车保险行业需要一个汽车形状用户保险报价,航空领域需要形状去进行飞机座位选择。这些复杂的形状,往往会被多次复用。但是目前我们能够做到只有工作表工作簿的序列化和反序列化,没有针对形状的相应处理。这就使得形状的复用变得有些困难。

思路
我们上面说到了,目前SpreadJS是支持工作表和工作簿的序列化和反序列化的,那么我们能否依靠这俩对象的功能来实现形状的复用呢?答案是可行的。我们将目标形状所在工作表通过fromJSON和toJSON放到工作簿中,然后通过形状的复制粘贴不就可以实现形状的复用了吗?

代码流程
1. 创建一个隐藏工作表,将含有目标形状的工作表序列到该隐藏工作表上
  1. if (!targetSpread.getSheetFromName("hiddenSheet")) {
  2.     targetSpread.addSheet(0, new GC.Spread.Sheets.Worksheet("hiddenSheet"));
  3. }
  4. var sourceSheet = sourceSpread.getActiveSheet();
  5. var hiddenSheet = targetSpread.getSheetFromName("hiddenSheet");
  6. hiddenSheet.fromJSON(replaceProperty(sourceSpread.getActiveSheet().toJSON(), "name", "hiddenSheet"));// 为了防止工作表名重复,需要进行一些内容替换
  7. hiddenSheet.visible(GC.Spread.Sheets.SheetTabVisible.veryHidden);// 深度隐藏
复制代码

2. 执行复制粘贴指令
  1. targetSpread.commandManager().execute({
  2.     cmd: "pasteShapes", // 粘贴形状指令
  3.     sheetName: targetSheet.name(),
  4.     pasteData: {
  5.         positions: coordinateArr,// 粘贴位置
  6.         shapeJsonList: shapeJSON,// 粘贴图形JSON
  7.         fromSheetName: hiddenSheet.name(),// 来源的sheet位置
  8.         isCutting: false,
  9.     },
  10. });
复制代码

效果

image.png903199462.png

完整代码


跨工作簿复制粘贴形状.html (6.38 KB, 下载次数: 150)

0 个回复

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