Lynn.Dou 发表于 2021-2-23 16:45:58

SpreadJS禁止编辑单元格

本帖最后由 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;
});

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





沉不住的心 发表于 2021-7-2 16:13:04

第二种方式的话依旧可以通过delete删除哦

沉不住的心 发表于 2021-7-2 16:16:09

本帖最后由 沉不住的心 于 2021-7-2 16:24 编辑

这种方式设置 ,部分不生效啊 ,我有30多个sheet页 ,有一些还是可以编辑啊,

Derrick.Jiao 发表于 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 发表于 2021-7-2 16:24:43

沉不住的心 发表于 2021-7-2 16:16
这种方式设置 ,不生效也很奇怪啊

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

另外,有新问题建议您开新帖交流~
页: [1]
查看完整版本: SpreadJS禁止编辑单元格