找回密码
 立即注册

QQ登录

只需一步,快速开始

littleknife
金牌服务用户   /  发表于:2018-1-20 13:41  /   查看:4743  /  回复:6
您好!
请问一下,关于单元格的style和表格的defaultStyle这两者的优先级,是不是如果单元格中的style中设置了的属性比如说locked=true,而defaultStyle中设置的locked=false。则单元格会取自身style的locked属性而不是defaultStyle的属性对吧。而如果单元格自身style没有设置的属性,则会取defaultStyle中的属性对吧。
麻烦请问一下defaultStyle和cell自身style之间的关系。
我这边碰到了一个问题是,开始的时候cell的style是{locked:true},后台我通过getStyle()方法取出样式对象并用delete删除掉当前的locked属性,然后在设置setDefaultStyle()的locked属性为false,但是发现并没有影响到开始那个单元格,该单元格的locked()还是true.请问一下这个该怎么解决。

6 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-1-22 10:47:56
沙发
是的,单元格的style优先级高于defaultStyle
您具体需要实现什么样的效果,用delete直接删除肯定是不行的
回复 使用道具 举报
littleknife
金牌服务用户   /  发表于:2018-1-22 11:26:04
板凳
ClarkPan 发表于 2018-1-22 10:47
是的,单元格的style优先级高于defaultStyle
您具体需要实现什么样的效果,用delete直接删除肯定是不行的

我这边就是要实现锁定和解锁部分单元格以及整张表格,做法分别是:
锁定部分单元格:
let defaultStyle = sheet.getDefaultStyle();
defaultStyle.locked = false;
sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport);
ranges.forEach((range) => {
        sheet.getRange(range.r, range.c, range.rc, range.cc).locked(true);
});
sheet.options.isProtected = true;
解锁部分单元格:
let sheetIsProtected = sheet.options.isProtected;
        if (sheetIsProtected) {
                ranges.forEach((range) => {
                        sheet.getRange(range.r, range.c, range.rc, range.cc).locked(false);
                });
        } else {
                //不锁定的话,解锁就没有意义
                return;
        }
锁定整张表格:
let defaultStyle = sheet.getDefaultStyle();
        defaultStyle.locked = true;
        sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport);
        sheet.options.isProtected = true;
解锁整张表格
let defaultStyle = sheet.getDefaultStyle();
        defaultStyle.locked = true;
        sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport);
        sheet.options.isProtected = false;

这四个操作需要每次执行的时候都能达到效果,但是现在解锁部分单元格会影响locksheet的操作,我这边的想法是在解锁表格和锁定表格之前先遍历所有的单元格并将每个单元格style中的locked属性去除,之后单元格的locked属性就是继承defaultStyle的中的locked属性,然后我就可以之间修改defaultStyle来修改所有单元格。而且json串也可以减少。但是现在这一步除了问题,单元格没有继承defaultStyle中的locked属性。所以希望你们能够帮我解决一下这个问题,或者有其他方案能够解决我们的需求。
还有我们这边有蛮多的spreadjs的问题,每次发帖效率太低,能不能给我qq什么的,能及时沟通,我们是要买这个产品的
回复 使用道具 举报
littleknife
金牌服务用户   /  发表于:2018-1-22 11:26:38
地板
ClarkPan 发表于 2018-1-22 10:47
是的,单元格的style优先级高于defaultStyle
您具体需要实现什么样的效果,用delete直接删除肯定是不行的

麻烦尽快回复一下
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-1-22 13:56:34
5#
本帖最后由 ClarkPan 于 2018-1-22 13:57 编辑

您好:
style这部分除了单元格的style之外,还有行style,列style,defaultstyle,优先级关系单元格style最高,defaultstyle最低。您出的问题有可能行或列的样式上也设置了locked,您可以用getActualStyle(rowindex,colindex)方法看一下,您去掉了单元格style的锁定后该单元格的ActualStyle中是否还有锁定,如果有应该是行或列中也设置了锁定。
您这部分
let defaultStyle = sheet.getDefaultStyle();
defaultStyle.locked = false;
sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport);
设置默认锁定为false的操作,在初始化完成后就设置一次,这样就实现了默认单元格为不锁定
之后在根据您实际情况在单元格样式上设定或者解锁即可。
另外就是,我们没有QQ的技术支持,您购买升级为金牌服务用户后可以在对应的金牌服务区进行发帖,那边问题处理的优先级更高一些。
回复 使用道具 举报
littleknife
金牌服务用户   /  发表于:2018-1-22 18:12:14
6#
ClarkPan 发表于 2018-1-22 13:56
您好:
style这部分除了单元格的style之外,还有行style,列style,defaultstyle,优先级关系单元格style最 ...

您好
我这边还是不行啊,我这边在每次在锁定或者解锁之前都会去清除一下所有行列的style,而且单元格本身的style中我会用delete语句去删除locked属性。照理来说cell应该会取到defaultStyle中的locked属性。但是我这边cell还是没有继承到defaultStyle的属性。是不是我的处理方法有问题。还有就是defaultStyle是不是在初始化完成之后只能设置一次,不能多次设置?
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-1-22 18:30:33
7#
这样,您提供一个重现问题的简单demo,我们这边重现后帮您看一下具体是怎么回事。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部