幽游 发表于 2024-11-25 11:21:34

sjs单元格如何限制只允许录入数据值

表格中有计算公式,但是有一部分可录入的单元格不允许用户填写公式,不能粘贴进去公式或者拖拽填充公式,单元格只能录入数据或粘贴进去数据,如何能实现?

Wilson.Zhang 发表于 2024-11-25 11:21:35

幽游 发表于 2024-11-25 16:45
这是控制了在录入了=号,单元格不允许录入完成,如何做到=号也不让他录入到单元格里?

那可以尝试监听按键等于号的事件,一般情况下,在使用SpreadJS电子表格时,通过UI操作需要用到等于号的场景一般就是在单元格中输入公式时。那么,监听按键事件,当按键为等于号时,通过SpreadJS的cancelInput命令强行退出输入编辑即可。如下动图所示:



可以参考如下代码:
document.addEventListener('keydown', function(event) {
    // 判断按下的键是否为等于号
   if (event.key === '=') {
      console.log('你按下了等于号 (=)');
      spread.commandManager().execute({ cmd: "cancelInput", sheetName: spread.getActiveSheet().name() });
    }
});


Wilson.Zhang 发表于 2024-11-25 15:06:33

您好!可以通过判断输入数据是否由等于号开始判别是否输入了公式。由于您提出除了编辑外还希望粘贴、拖拽填充也能禁止引入公式,那么,可以分别通过监听EditChanging、ClipBoardPasting实现。具体地,在每个事件中判断试图设置在单元格中的数据是否以等于号开头,一般情况下可将这样的数据看作公式。

通过EditEnding事件禁止在单元格中输入公式,参考如下代码:
spread.bind(GC.Spread.Sheets.Events.EditEnding, function (e, args) {
    console.log('edit end: ', args);
    var inputData = args.editingText;
    if(inputData && inputData.length > 0){
      var text = inputData.trim();
      if(text.length !== 0 && text.startsWith("=")){
            console.log("不支持输入公式");
            args.cancel = true;
      }
    }
});
通过ClipboardPasted事件阻拦在单元格粘贴公式,参考如下代码:
spread.bind(GC.Spread.Sheets.Events.ClipboardPasting, function(e, args) {
    console.log('clipboard pasting, args: ', args);
    if (args.pasteData && args.pasteData.text) {
      var inputData = args.pasteData.text;
      console.log('text: ', inputData);
      if(inputData && inputData.length > 0){
            var text = inputData.trim();
            if(text.length !== 0 && text.startsWith("=")){
                console.log("不支持输入公式");
                args.cancel = true;
            }
      }
    }
});
在输入、粘贴时禁止了公式输入,拖拽填充时自然也就不存在以公式为拖拽源的情景。

幽游 发表于 2024-11-25 16:45:20

这是控制了在录入了=号,单元格不允许录入完成,如何做到=号也不让他录入到单元格里?
页: [1]
查看完整版本: sjs单元格如何限制只允许录入数据值