找回密码
 立即注册

QQ登录

只需一步,快速开始

Lynn.Dou 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-23 16:45  /   查看:5284  /  回复:4
本帖最后由 lynn512 于 2021-2-23 16:47 编辑

背景:禁止编辑某些单元格 是很多SJS用户常遇到的需求,相信一些小伙伴已经知道可以通过表单保护来解决,但是表单保护也存在一定的局限性。
比如:设置表单保护后,下拉填充无效;table不可自动扩展;table不能插入行/列 等等。
但一些用户既想实现某些单元格不可编辑,又不想影响填充、表格的一些行为,这个时候如何“鱼和熊掌兼得”呢?
本文就带领大家学习:禁止编辑单元格的第二种方式 - 事件监听。

1、如果有小伙伴还不了解表单保护,可以先阅读下方技术博客或在学习指南了解更多信息:
表单保护相关问题总结
学习指南 - 表单保护

2、监听 EditStarting 事件。
监听 EditStarting 事件,在事件中结合自己的业务逻辑,来判断是否是不能编辑的单元格。
如果是目标单元格,则设置args.cacel = true, 就可以阻止继续编辑了。
示例代码:
sheet.bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) {
                console.log("Start cell editing.");
                // 判断如果是不能编辑的单元格,则执行以下代码
                args.cancel = true;
  });

这样我们就可以实现禁止
编辑某些单元格的需求了。





4 个回复

倒序浏览
沉不住的心
中级会员   /  发表于:2021-7-2 16:13:04
沙发
第二种方式的话依旧可以通过delete删除哦
回复 使用道具 举报
沉不住的心
中级会员   /  发表于:2021-7-2 16:16:09
板凳
本帖最后由 沉不住的心 于 2021-7-2 16:24 编辑

这种方式设置 ,部分不生效啊 ,我有30多个sheet页 ,有一些还是可以编辑啊,
image.png461010741.png
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-7-2 16:23:44
地板
沉不住的心 发表于 2021-7-2 16:13
第二种方式的话依旧可以通过delete删除哦

第二种方法可以搭配spread.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);使用
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-7-2 16:24:43
5#
沉不住的心 发表于 2021-7-2 16:16
这种方式设置 ,不生效也很奇怪啊

您可以通过sheet.getCell(0,0).locked()看下单元格是否是true。

另外,有新问题建议您开新帖交流~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部