找回密码
 立即注册

QQ登录

只需一步,快速开始

AsIAm

注册会员

14

主题

43

帖子

131

积分

注册会员

积分
131
AsIAm
注册会员   /  发表于:2024-4-3 15:58  /   查看:3944  /  回复:10
8金币
在spraedA中通过toJson()获取了某一个sheet

在spreadB中通过fromJson()设置到spreadB中一个存在的sheet里面 会有样式丢失的情况,每次丢失的部分不一致有时候是文本颜色有时候是文本方向等等
这个有什么好的方法解决吗?

最佳答案

查看完整内容

在spreadA中执行上面的 在spreadB中执行下面的代码 在此期间,您需要保留sheetJson 值和styleArray 值

10 个回复

倒序浏览
最佳答案
最佳答案
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-4-3 15:58:48
来自 10#

在spreadA中执行上面的
  1. var sheetJson = JSON.stringify(spreadA.getSheet(0).toJSON());
  2. let styleArray =     spreadA.getNamedStyles()
复制代码

在spreadB中执行下面的代码

  1. styleArray .forEach(function (namedStyle) {
  2.         spreadB.addNamedStyle(namedStyle);
  3.     })
  4.     spreadB.getSheet(0).fromJSON(JSON.parse(sheetJson));
复制代码

在此期间,您需要保留sheetJson 值和styleArray 值
回复 使用道具 举报
三月七
注册会员   /  发表于:2024-4-3 16:31:05
2#
建议 toJSON 时设置 saveAsView 属性,并且把 json 利用 JSON.stringify 和 JSON.parse 克隆一遍。


  1. <div>var json = JSON.stringify(sheet1.toJSON({saveAsView: true}));
  2. sheet2.fromJSON(JSON.parse(json));</div>
复制代码


回复 使用道具 举报
AsIAm
注册会员   /  发表于:2024-4-3 16:40:04
3#
这个应该不太可行  spreadA和spreadB 都有三四十个sheet
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-4-3 16:47:15
4#
您好,可以参考下这篇帖子对您是否有帮助
https://gcdn.grapecity.com.cn/showtopic-133618-1-434.html
复制一个工作簿,然后删除所有的sheet ,此时spread.toJSON()
在新的工作簿中fromJSON , 然后导入您sheet.toJSON()后的json文件
回复 使用道具 举报
AsIAm
注册会员   /  发表于:2024-4-3 17:42:22
5#
三月七 发表于 2024-4-3 16:31
建议 toJSON 时设置 saveAsView 属性,并且把 json 利用 JSON.stringify 和 JSON.parse 克隆一遍。

JSON.stringify 和 JSON.parse 已经用过了的,
toJSON 时设置 saveAsView 属性 这个刚刚试过没有效果
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-4-7 12:23:51
6#
您好,如楼上所言,可以参考下这篇帖子对您是否有帮助
https://gcdn.grapecity.com.cn/showtopic-133618-1-434.html

回复 使用道具 举报
AsIAm
注册会员   /  发表于:2024-4-8 10:56:28
7#
Ellia.Duan 发表于 2024-4-7 12:23
您好,如楼上所言,可以参考下这篇帖子对您是否有帮助
https://gcdn.grapecity.com.cn/showtopic-133618-1 ...

这个应该不太可行  spreadA和spreadB 都有三四十个sheet
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-4-8 14:49:29
8#
本帖最后由 Ellia.Duan 于 2024-4-8 14:50 编辑

您好,丢失的样式是自定义样式。您可以复制spreadA的自定义样式到spreadB
  1. function addSheetB(e){
  2.     var sheetJson = JSON.stringify(spreadA.getSheet(0).toJSON());

  3.     spreadB.suspendPaint();
  4.     spreadA.getNamedStyles().forEach(function (namedStyle) {
  5.         spreadB.addNamedStyle(namedStyle);
  6.     })
  7.     spreadB.getSheet(0).fromJSON(JSON.parse(sheetJson));
  8.     spreadB.resumePaint();
  9. }
复制代码
参考:https://demo.grapecity.com.cn/sp ... 4%E9%97%AE%E9%A2%98


回复 使用道具 举报
AsIAm
注册会员   /  发表于:2024-4-8 15:32:43
9#
Ellia.Duan 发表于 2024-4-8 14:49
您好,丢失的样式是自定义样式。您可以复制spreadA的自定义样式到spreadB
参考:https://demo.grapecity.c ...

在我对spreadB进行处理的时候,好像没有办法拿到spreadA的对象,(是不是只能序列化SpreadA由后端存起来,再在spreadB需要处理的时候反序列化spreadA  在做下面这个操作
spreadA.getNamedStyles().forEach(function (namedStyle) {
        spreadB.addNamedStyle(namedStyle);
    })
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部