本帖最后由 Ellia.Duan 于 2024-10-22 17:31 编辑
在数据填报过程中,在一些场景中,不允许其他用户删除默认的单元格内容,这时候需要用权限控制单元格的状态。如何实现呢?除了传统给的解决方案,禁用快捷键。在v16版本推出的默认值功能,可以很好的解决这个问题。
我们先看下,如何用传统方式禁用删除操作。
一、禁用删除键
具体可以参考这篇文章:
https://gcdn.grapecity.com.cn/showtopic-153126-1-1.html
禁用之后,还发现了一个新的问题,点击当前单元格,右键菜单,发现菜单中存在“清除内容”选项,点击此菜单,同样可以把单元格中的内容删除掉。
所以接下来的思路就是将这些菜单禁用掉或者重写。
二、重写右键菜单
重写可以参考下面的代码:
- var commandManager = spread.commandManager();
- var command = {
- canUndo: true,
- execute: function (context, options, isUndo) {
- var Commands = GC.Spread.Sheets.Commands;
- options.cmd = "CustomClearContents";
- if (isUndo) {
- Commands.undoTransaction(context, options);
- return true
- } else {
- Commands.startTransaction(context, options);
- let {row,col} = context.getActiveSheet().getSelections()[0];
- if(row===0&&col ===0){ //设置不能删除的单元格
- }else{
- var commandManager = context.commandManager();
- commandManager.execute({cmd: "gc.spread.contextMenu.clearContents", sheetName: spread.getActiveSheet().name()});
- }
- console.log("此处写入后处理逻辑");
- Commands.endTransaction(context, options);
- return true
- }
- }
- };
- commandManager.register("CustomClearContents", command);
- spread.contextMenu.menuData.forEach(function(item,index,self){
- if (item.name === 'gc.spread.clearContents') {
- item.command = "CustomClearContents";
- }
- })
复制代码
以上代码对“清除内容”菜单进行了重写,当判断当前单元格为A1单元格时,不做清除内容操作。
三、禁用右键菜单
除此还可以根据选中的单元格进行禁用。
- function ContextMenu() {
- }
- ContextMenu.prototype = new GC.Spread.Sheets.ContextMenu.ContextMenu(spread);
- ContextMenu.prototype.onOpenMenu = function (menuData, itemsDataForShown, hitInfo, spread) {
- let sheet = spread.getActiveSheet();
- let selections = sheet.getSelections();
- for (let i = 0; i < itemsDataForShown.length; i++) {
- var item = itemsDataForShown[i];
- if (item.name === "gc.spread.clearContents" && (selections[0].col == 0)) {
- item.disable = true;
- }
- }
- };
- spread.contextMenu = new ContextMenu();
复制代码 上述代码实现了第一列“清除”菜单的禁用,如下图所示:
好了,通过上述种种方案,终于可以实现不能删除单元格内容的需求了。
四、默认值
但是,有没有更简单的方案呢?
答案是有的:在V16版本,SpreadJS推出了一个默认值的概念,可以从这里体验一下:
https://demo.grapecity.com.cn/sp ... efault-value/purejs
其主要用法是
- sheet.setDefaultValue(0,0,1);
复制代码 上述这行代码表示:为A1单元格创建了一个默认值,默认值是1,用户可以编辑修改,但是不能删除,或者说删除不了。
如下动图所示:
五、表单保护
有细心的小伙伴们发现了,通过上述的方案可以实现单元格的内容不被删除,但是可以通过删除行/列使其当前单元格直接被删除。
点击确定后,原来表单中的第一行被删除,自然A1单元格的内容也没了,对此,可以通过表单保护来实现单元格不被编辑:
具体可以参考这篇文章:
https://demo.grapecity.com.cn/sp ... tion/disableEditing
|
-
|