找回密码
 立即注册

QQ登录

只需一步,快速开始

陈皮

中级会员

43

主题

243

帖子

772

积分

中级会员

积分
772

悬赏达人

陈皮
中级会员   /  发表于:2023-5-5 18:25  /   查看:1889  /  回复:3
1金币
需求:

新建sheet时,获取默认上一个sheet的打印配置
代码如下:
  1. //绑定新建sheet(sheet改变事件)
  2.   spread.bind(GC.Spread.Sheets.Events.SheetChanged, function (sender, args) {
  3.     //离开旧sheet时保存该sheet打印配置
  4.     if (args.propertyName == 'isSelected' && args.oldValue) {
  5.       prePrintInfo = spread.getSheet(args.sheetIndex).printInfo()
  6.     }
  7.     if (args.propertyName == 'insertSheet') {
  8.       let sheet = spread.getSheet(args.sheetIndex)
  9.       sheet.setRowCount(500)
  10.       //默认获取上次打印配置
  11.       if (prePrintInfo === undefined) {
  12.       } else {
  13.         sheet.printInfo(prePrintInfo);
  14.         prePrintInfo = undefined
  15.       }
  16.     }
  17.   });
复制代码
现在的问题是修改新的sheet打印配置,旧的sheet也会同步修改,猜测是prePrintInfo共用一个地址导致。
使用sheet.printInfo(Object.assign({}, prePrintInfo));
或者
sheet.printInfo(JSON.parse(JSON.stringify(prePrintInfo)));
都会报错。
console打印显示:
console.log(prePrintInfo);
image.png338741149.png
console.log(Object.assign({}, prePrintInfo));
image.png493217162.png
两者有什么区别吗?将这两个对象复制到json在线解析网站也显示不同结果
如何修改使各个sheet的printInfo独立,互不影响

最佳答案

查看完整内容

可以用lodash包里面的cloneDeep去进行深克隆,printInfo里面除了一些属性以外还有一些方法,这些是无法通过json去序列化和反序列化的,所有会报错。

3 个回复

倒序浏览
最佳答案
最佳答案
MillionDream
注册会员   /  发表于:2023-5-5 18:25:25
来自 2#
可以用lodash包里面的cloneDeep去进行深克隆,printInfo里面除了一些属性以外还有一些方法,这些是无法通过json去序列化和反序列化的,所有会报错。

评分

参与人数 1满意度 +5 收起 理由
陈皮 + 5

查看全部评分

回复 使用道具 举报
陈皮
中级会员   /  发表于:2023-5-6 16:15:10
3#
MillionDream 发表于 2023-5-6 15:19
可以用lodash包里面的cloneDeep去进行深克隆,printInfo里面除了一些属性以外还有一些方法,这些是无法通过 ...

好的,我试试
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-5-6 19:16:00
4#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部