找回密码
 立即注册

QQ登录

只需一步,快速开始

cih-team

等待验证会员

14

主题

44

帖子

224

积分

等待验证会员

积分
224
cih-team
等待验证会员   /  发表于:2020-8-26 15:28  /   查看:5689  /  回复:10
问题描述:加载文件,设置固定几列不可编辑,其它可编辑(isProtected设置为true,工作表默认样式锁定状态设置为false,不可编辑列锁定状态设置为true),保存成excel文件,之后再加载当前excel文件,想要设置工作表都不可编辑时,发现之前可编辑的单元格不生效,依然能编辑。
查找原因发现:加载文件,设置固定几列不可编辑,导出ssjson,同时导出excel,再把导出的excel导入并转换ssjson,会发现跟第一步导出的ssjson文件相比,导出excel再导入之后生成的ssjson的可编辑单元格比之前多了一个样式名称,关联的样式设置了锁定状态为false,所以这时候就不会继承工作表的锁定状态。这种情况要如何解决。

10 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-8-26 15:56:43
沙发
您好,未能成功复现您提出的问题。
建议您提供相应的ssjson文件以便我们更好为您解决此问题。
回复 使用道具 举报
cih-team
等待验证会员   /  发表于:2020-8-26 18:06:16
板凳
附件中是问题demo,麻烦帮看下是哪里不对

demo.rar

909.97 KB, 下载次数: 135

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-8-26 18:49:01
地板
问题收到,这边调研一下,明天给您回复。
回复 使用道具 举报
cih-team
等待验证会员   /  发表于:2020-8-27 14:17:21
5#
lynn512 发表于 2020-8-26 18:49
问题收到,这边调研一下,明天给您回复。

麻烦问下有结果了么
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-8-27 15:25:27
6#
您好,

Spread1 导入的数据来自于 data.js文件 , 此时表单是没有默认样式 defaultStyle 的,
所以在您设置了 defaultStyle.locked = true 时,表单单元格锁定生效。


Spread2 导入Spread1 后,此时的spread2 已经有了样式(来自Spread1设置的样式),
按照样式的优先级,defaultStyle 的优先级最低,
所以这个时候再通过defaultStyle  设置表单单元格锁定就无效了。

您可以通过遍历设置单元格的样式来锁定单元格。

关于样式优先级的相关内容推荐您阅读此篇博客:
https://www.grapecity.com.cn/blo ... ply-spreadjs-styles






回复 使用道具 举报
cih-team
等待验证会员   /  发表于:2020-8-28 09:20:24
7#
lynn512 发表于 2020-8-27 15:25
您好,

Spread1 导入的数据来自于 data.js文件 , 此时表单是没有默认样式 defaultStyle 的,

我的问题是,Spread1中导出的ssjon,没有设置过锁定的列,是没有样式的,为什么导出excel再导入到Spread2之后,会给部分单元格加上样式,并且是没有规律的,部分有,部分没有,放置的导出ssjson是方便你们看到对比的ssjson,优先级这个我知道,如果没有给未设置过样式的单元格设置样式,就会继承全局的defaultStyle了,就不会存在现在的问题
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-8-28 15:54:20
8#
问题收到,稍后给您提供一个demo。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-8-28 18:35:41
9#
本帖最后由 lynn512 于 2020-8-28 19:00 编辑

您好,在spread1中,您修改了表单单元格默认为true的 locked 为false,然后设置了几列为true。这一操作对spread1的样式进行了修改。
所以在Spread2中设置defaultStyle对于已经设置了样式的表单(导入的spread1)来说是不生效的。
解决办法为通过给优先级最高的单元格设置 style ,来实现所有单元格锁定。
您所说的两次导出的ssjsonwen文件,有样式名称的差异,这是导出为excel文件的原因,是产品的内部实现机制,在这方面无需过多关注。
请问您具体的需求是什么?如果是想实现全部单元格锁定的功能,您可以参考附件的demo:
关键代码:
  1. var style = new GC.Spread.Sheets.Style();
  2.           style.locked = true;
  3.           spread.suspendPaint();
  4.           for(var i=0;i<sheet.getRowCount();i++){
  5.             for(var j=0;j<sheet.getColumnCount();j++){
  6.               sheet.setStyle(i,j,style);
  7.             }
  8.           }
  9.           spread.resumePaint();
复制代码





demo.zip

1008.75 KB, 下载次数: 128

回复 使用道具 举报
cih-team
等待验证会员   /  发表于:2020-10-22 18:37:29
10#
lynn512 发表于 2020-8-28 18:35
您好,在spread1中,您修改了表单单元格默认为true的 locked 为false,然后设置了几列为true。这一操作对sp ...

暂时用其它方式解决了,您提供的这种方式,数据量大的话不是很优的解决方案吧,样式名称的差异可以不关注,但是加的样式名称关联到的样式跟本身的不一致需要关注吧,例如有些没有设置锁定状态的单元格,其关联的样式是锁定的。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部