背景 在某些行业会会用到一些复杂的形状去实现业务的处理,例如汽车保险行业需要一个汽车形状用户保险报价,航空领域需要形状去进行飞机座位选择。这些复杂的形状,往往会被多次复用。但是目前我们能够做到只有工作表工作簿的序列化和反序列化,没有针对形状的相应处理。这就使得形状的复用变得有些困难。
思路 我们上面说到了,目前SpreadJS是支持工作表和工作簿的序列化和反序列化的,那么我们能否依靠这俩对象的功能来实现形状的复用呢?答案是可行的。我们将目标形状所在工作表通过fromJSON和toJSON放到工作簿中,然后通过形状的复制粘贴不就可以实现形状的复用了吗?
代码流程 1. 创建一个隐藏工作表,将含有目标形状的工作表序列到该隐藏工作表上
- if (!targetSpread.getSheetFromName("hiddenSheet")) {
- targetSpread.addSheet(0, new GC.Spread.Sheets.Worksheet("hiddenSheet"));
- }
- var sourceSheet = sourceSpread.getActiveSheet();
- var hiddenSheet = targetSpread.getSheetFromName("hiddenSheet");
- hiddenSheet.fromJSON(replaceProperty(sourceSpread.getActiveSheet().toJSON(), "name", "hiddenSheet"));// 为了防止工作表名重复,需要进行一些内容替换
- hiddenSheet.visible(GC.Spread.Sheets.SheetTabVisible.veryHidden);// 深度隐藏
复制代码
2. 执行复制粘贴指令
- targetSpread.commandManager().execute({
- cmd: "pasteShapes", // 粘贴形状指令
- sheetName: targetSheet.name(),
- pasteData: {
- positions: coordinateArr,// 粘贴位置
- shapeJsonList: shapeJSON,// 粘贴图形JSON
- fromSheetName: hiddenSheet.name(),// 来源的sheet位置
- isCutting: false,
- },
- });
复制代码
效果
完整代码
跨工作簿复制粘贴形状.html
(6.38 KB, 下载次数: 150)
|
|