找回密码
 立即注册

QQ登录

只需一步,快速开始

俊123

初级会员

29

主题

83

帖子

234

积分

初级会员

积分
234
俊123
初级会员   /  发表于:2023-2-15 12:14  /   查看:1961  /  回复:10
5金币
关于json赋值后, 在重新获取不正确.   

用spread.fromJSON ("xxxx")加载模板json后,  在另一个方法用spread.toJSON(), 获取的数据是历史json


var designer = GC.Spread.Sheets.Designer.findControl("ExcelTemplateDiv");
var spread1 = designer.getWorkbook();
var jsonString = JSON.stringify(spread1.toJSON());//获取到的是上次编辑的历史json




最佳答案

查看完整内容

经调研,是因为您初始化了两个designer 。建议您将代码改为下图中代码 第二次fromJSON时,通过findControl获取之前的工作簿,并将其覆盖掉。 这样子想要toJSON时,可以拿到正确的值。 按照您的代码逻辑,初始化了两次designer ,其对象值是不一样的。然后此时findControl拿到的是第一个designer ,所以导致了您所说的问题。

10 个回复

倒序浏览
最佳答案
最佳答案
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-2-15 12:14:01
来自 9#
本帖最后由 Ellia.Duan 于 2023-2-28 17:23 编辑

经调研,是因为您初始化了两个designer 。建议您将代码改为下图中代码
第二次fromJSON时,通过findControl获取之前的工作簿,并将其覆盖掉。
这样子想要toJSON时,可以拿到正确的值。

image.png672588195.png

按照您的代码逻辑,初始化了两次designer ,其对象值是不一样的。然后此时findControl拿到的是第一个designer ,所以导致了您所说的问题。


回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-2-15 15:24:33
2#
不太明白您的问题。
SpreadJS中的fromJSON与toJSON是反序列化选项与序列化API。
当用户想要保存某个场景,做了修改后,可以通过toJSON保存当前设置。
当下次想要进行场景恢复的时候,可以通过fromJSON来实现。
当用户fromJSON() 后,再通过一些UI操作或者代码执行 修改当前工作簿,此时toJSON()得到的json文件时修改之后的。

如果上述解释还不能解决您的问题,建议您上传下您的json文件以及说明下您问题要如何复现的流程
回复 使用道具 举报
俊123
初级会员   /  发表于:2023-2-24 14:49:12
3#
我重新描述一下代码的过程

//第一次赋值json
                spread.fromJSON(excelJson1, jsonOptions);
                ......
               
                //第二次赋值json
                spread.fromJSON(excelJson, jsonOptions);                                               
                var jsonString = JSON.stringify(spread.toJSON());               
                console.warn(jsonString);//取出来的是最新赋值进去的json, (正常)
               
                //再次用findControl方法取出json是第一次的json (不正常)
                var designer2 = GC.Spread.Sheets.Designer.findControl("ExcelTemplateDiv");
                var spread2 = designer2.getWorkbook();
                var jsonString2 = JSON.stringify(spread2.toJSON());
                console.error(jsonString2);//再次用findControl方法取出ssjson是上一次加载的json
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-2-24 18:20:30
4#
您好,这边通过您上述代码后,未能复现此问题,测试过程如下:
1、点击”修改json“按钮,其中修改sheet背景为红色。然后将其导出为first.ssjson
image.png912535095.png image.png312275084.png
2、点击 “再次获取json”按钮,其中按照您的代码,再次findControl ,然后将Spread2.toJSON()之后的json导出为second.ssjson
image.png212815856.png
3、最后,分别导入first.ssjson 与second.ssjson ,均发现sheet背景色为红色。没有复现您说的第二次toJSON为原始值的问题



序列化.html

3.88 KB, 下载次数: 89

回复 使用道具 举报
俊123
初级会员   /  发表于:2023-2-28 12:13:25
5#
是通过代码加载json才能出现,  附件是test代码.

test.rar

1.89 KB, 下载次数: 117

回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-2-28 14:28:01
6#
俊123 发表于 2023-2-28 12:13
是通过代码加载json才能出现,  附件是test代码.

输出的确实是2222这个json呀

image.png373183287.png
designer初始化后,先fromJSON 了15.2.2版本的json文件,此时页面显示如下
image.png584670104.png
接着按照您的代码逻辑,fromJSON 了15.1.1版本的json文件,此时将之前spread场景进行了覆盖,此时页面显示如下:
image.png261185912.png
此时toJSON ,获取到的也是15.1.1版本的json 。
所以未能复现您说的问题。

回复 使用道具 举报
俊123
初级会员   /  发表于:2023-2-28 14:36:26
7#
改成15.1.1 也是一样 image.png603794555.png
image.png574307250.png
回复 使用道具 举报
俊123
初级会员   /  发表于:2023-2-28 14:41:14
8#
test2 页面写了说明..

test2.rar

1.93 KB, 下载次数: 116

回复 使用道具 举报
俊123
初级会员   /  发表于:2023-3-1 16:42:10
10#
好的, 已解决.
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部