找回密码
 立即注册

QQ登录

只需一步,快速开始

测测码

注册会员

4

主题

9

帖子

33

积分

注册会员

积分
33
  • 191

    金币

  • 4

    主题

  • 9

    帖子

最新发帖
测测码
注册会员   /  发表于:2024-5-22 08:45  /   查看:374  /  回复:7

多份数据需要通过一份SSJSON模板展示


保存时获取spread.toJSON的shape
image.png809118041.png

反显时new一个shape对象,然后执行formJSON,但是好像没什么效果
image.png522492980.png



如果把整个spread再次toJSON一次,然后赋值shapes,再spread.formJSON覆盖,虽然shape正常了,但是会有自定义函数丢失等问题

有没有解决方法

7 个回复

倒序浏览
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-5-22 11:16:59
沙发
您好,您似乎是期望将一个shape在多个spread里复用是吗?对此我们无法做到这个效果,请问您的具体需求是什么,我想既然是要做模板,应该是这个模板工作簿所有内容都需要用到,为什么单单只用其中的形状呢
其次,自定义函数您可以参考这篇学习指南来进行序列化和反序列化:https://demo.grapecity.com.cn/sp ... erialization/purejs
image.png529230346.png
回复 使用道具 举报
测测码
注册会员   /  发表于:2024-5-22 13:40:30
板凳
Richard.Huang 发表于 2024-5-22 11:16
您好,您似乎是期望将一个shape在多个spread里复用是吗?对此我们无法做到这个效果,请问您的具体需求是什 ...

一份ssjson(月次报表模板)对应多份的数据(exp:1月的,2月的,3月的。。)
打开时根据ssjson先生成了spread。再根据url的月份参数查询月份数据,向spread填充对应月份的数据(这里的数据包括了单元格数据和shape的数据,单元格数据已经有逻辑可以填充了。现在在实现怎么保存每个月的shape对象,再次打开时也像单元格数据一样填充进去。)用于渲染

原本是想,把保存的shape直接覆盖当前spread.toJSON里的shape,然后再次fromjson一下。但是渲染shape之前可能已经设置了一些自定义的配置,这些东西会丢。
所以现在想试着根据shape的json配置,直接修改spread的shapes。



ssjson模板是单独保存的,月份数据(单元格数据和shape数据)是按照月份保存的。

复用的是ssjson模板,用不同的shape数据向模板填充,然后渲染。
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-5-22 17:16:15
地板
测测码 发表于 2024-5-22 13:40
一份ssjson(月次报表模板)对应多份的数据(exp:1月的,2月的,3月的。。)
打开时根据ssjson先生成了sp ...

了解了,但是我们需要了解的是,shape的fromJSON和toJSON方法并不是公开的API,直接调用可以不会达到您要的效果,但是我们可以借助pasteShapes这个指令实现类似的一个效果,附件是我按照这个思路实现的一个demo,您看能否对应的需求有所帮助

跨工作簿复制粘贴形状.html

6.38 KB, 下载次数: 20

回复 使用道具 举报
测测码
注册会员   /  发表于:2024-5-23 10:50:49
6#
Richard.Huang 发表于 2024-5-22 17:16
了解了,但是我们需要了解的是,shape的fromJSON和toJSON方法并不是公开的API,直接调用可以不会达到您要 ...

pasteShapes这个指令是什么版本开始支持的,v14可以吗
回复 使用道具 举报
测测码
注册会员   /  发表于:2024-5-23 11:16:19
7#
Richard.Huang 发表于 2024-5-22 17:16
了解了,但是我们需要了解的是,shape的fromJSON和toJSON方法并不是公开的API,直接调用可以不会达到您要 ...
  1.                                                         sheet.shapes.all().forEach(function(shape,shapeIndex){
  2.                                                                 shapeJSONArr.push(JSON.stringify(shape.toJSON()));
  3.                                                                 coordinateArr.push({x:1,y:1});
  4.                                                         });
  5.                             self.spread.commandManager().execute({
  6.                                 cmd: "pasteShapes", // 粘贴形状指令
  7.                                 sheetName: sheet.name(),
  8.                                 pasteData: {
  9.                                     positions: coordinateArr,
  10.                                     shapeJsonList: shapeJSONArr,
  11.                                     fromSheetName: sheet.name(),
  12.                                     isCutting: false,
  13.                                 },
  14.                             });       
复制代码

这边除了fromSheetName和sheetName是一致的(与你给出的示例不同)外,还有版本不同外应该没有其他不同了,但是好像粘贴不了
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-5-23 13:34:06
8#
测测码 发表于 2024-5-23 11:16
这边除了fromSheetName和sheetName是一致的(与你给出的示例不同)外,还有版本不同外应该没有其他不同 ...

V14版本在fromJSON和toJSON上存在一些问题,例如sheet.fromJSON()并不会清除sheet身上本身的shape,会在sheet上追加shape。其次V14关于pasteShapes指令的参数也和V17有所不同。附件是在V14版本上实现的一个pasteShapes指令,期望能够对您有帮助。不过最好还是升级到最新版本来帮助解决您的问题



test.html

6.52 KB, 下载次数: 14

回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-5-31 10:45:51
9#
您好,由于本帖较长时间没有回复,本帖先做结贴处理了,后续如您有其他问题,欢迎您开新帖提问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部