如何跨工作簿复制粘贴形状
背景在某些行业会会用到一些复杂的形状去实现业务的处理,例如汽车保险行业需要一个汽车形状用户保险报价,航空领域需要形状去进行飞机座位选择。这些复杂的形状,往往会被多次复用。但是目前我们能够做到只有工作表工作簿的序列化和反序列化,没有针对形状的相应处理。这就使得形状的复用变得有些困难。思路我们上面说到了,目前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,
},
});
效果
完整代码
页:
[1]