找回密码
 立即注册

QQ登录

只需一步,快速开始

幽游

注册会员

10

主题

23

帖子

93

积分

注册会员

积分
93
幽游
注册会员   /  发表于:2024-11-25 11:21  /   查看:132  /  回复:3
1金币
表格中有计算公式,但是有一部分可录入的单元格不允许用户填写公式,不能粘贴进去公式或者拖拽填充公式,单元格只能录入数据或粘贴进去数据,如何能实现?

最佳答案

查看完整内容

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

3 个回复

正序浏览
幽游
注册会员   /  发表于:2024-11-25 16:45:20
3#
这是控制了在录入了=号,单元格不允许录入完成,如何做到=号也不让他录入到单元格里?
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-11-25 15:06:33
2#
您好!可以通过判断输入数据是否由等于号开始判别是否输入了公式。由于您提出除了编辑外还希望粘贴、拖拽填充也能禁止引入公式,那么,可以分别通过监听EditChanging、ClipBoardPasting实现。具体地,在每个事件中判断试图设置在单元格中的数据是否以等于号开头,一般情况下可将这样的数据看作公式。

通过EditEnding事件禁止在单元格中输入公式,参考如下代码:
  1. spread.bind(GC.Spread.Sheets.Events.EditEnding, function (e, args) {
  2.     console.log('edit end: ', args);
  3.     var inputData = args.editingText;
  4.     if(inputData && inputData.length > 0){
  5.         var text = inputData.trim();
  6.         if(text.length !== 0 && text.startsWith("=")){
  7.             console.log("不支持输入公式");
  8.             args.cancel = true;
  9.         }
  10.     }
  11. });
复制代码

通过ClipboardPasted事件阻拦在单元格粘贴公式,参考如下代码:
  1. spread.bind(GC.Spread.Sheets.Events.ClipboardPasting, function(e, args) {
  2.     console.log('clipboard pasting, args: ', args);
  3.     if (args.pasteData && args.pasteData.text) {
  4.         var inputData = args.pasteData.text;
  5.         console.log('text: ', inputData);
  6.         if(inputData && inputData.length > 0){
  7.             var text = inputData.trim();
  8.             if(text.length !== 0 && text.startsWith("=")){
  9.                 console.log("不支持输入公式");
  10.                 args.cancel = true;
  11.             }
  12.         }
  13.     }
  14. });
复制代码

在输入、粘贴时禁止了公式输入,拖拽填充时自然也就不存在以公式为拖拽源的情景。
回复 使用道具 举报
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2024-11-25 11:21:35
来自 4#
幽游 发表于 2024-11-25 16:45
这是控制了在录入了=号,单元格不允许录入完成,如何做到=号也不让他录入到单元格里?

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


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



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部