找回密码
 立即注册

QQ登录

只需一步,快速开始

Dtttax

银牌会员

265

主题

663

帖子

2116

积分

银牌会员

积分
2116
Dtttax
银牌会员   /  发表于:2023-12-8 17:14  /   查看:4213  /  回复:13
1金币
本帖最后由 Ellia.Duan 于 2024-1-8 16:31 编辑


产品:SpreadJS
版本:V14.2.3
问题编号:SJS-22239

我们自定义快捷键实现了类似于excel的ctrl+enter的功能,选择一块区域,在公示栏输入值,按CTRL+enter可以把选择的区域都设置为相同的值;但是在单元格编辑的时候,Ctrl+enter是在单元格内换行,没有调用到自定义快捷键的方法,这里是不是有快捷键冲突?

最佳答案

查看完整内容

您好,可以参考下面的代码:

13 个回复

倒序浏览
最佳答案
最佳答案
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-12-8 17:14:43
来自 14#
您好,可以参考下面的代码:
  1. var isReservedKeyFn = GC.Spread.Sheets.CellTypes.Text.prototype.isReservedKey;
  2. GC.Spread.Sheets.CellTypes.Text.prototype.isReservedKey = function (evt, context) {
  3.     var { keyCode, ctrlKey, altKey, shiftKey } = evt;
  4.     if (keyCode === 13 && ctrlKey && !shiftKey && !altKey) {
  5.         return false;
  6.     }
  7.     return isReservedKeyFn.apply(this, arguments);
  8. }
  9. spread.commandManager().register('customCommitArrayFormula', GC.Spread.Sheets.Commands.commitArrayFormula, GC.Spread.Commands.Key.enter, true, false, false, false);
复制代码


回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-12-8 18:23:53
2#
您好,
单元格处于编辑状态时,按下ctrl+enter会自动换行,这属于目前的设计。
正如您所属,我在Excel中测试,在公式编辑栏处按下ctrl+enter可以实现批量设置公式,不过这并非是单元格处于编辑状态时的操作。
请问您的需求是什么呢?请详细描述下。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-12-28 17:23:54
3#
您好,您的问题解决了吗?如果没有解决,建议如楼上所言,详细描述下您的需求?
回复 使用道具 举报
Dtttax
银牌会员   /  发表于:2024-1-3 14:22:33
4#
Ellia.Duan 发表于 2023-12-28 17:23
您好,您的问题解决了吗?如果没有解决,建议如楼上所言,详细描述下您的需求?

选择一块区域,键盘输入值,然后CTRL+enter,在excel上这么操作会把选中的区域都填上刚刚输入的值,但是在spreadjs操作,就是换行,我们自己实现了CTRL+enter快捷键,发现并不会进这个自定义方法,在公式兰可以
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-1-3 17:27:26
5#
您好,是否可以贴出您实现的CTRL+enter快捷键相关代码,我们在此基础上调研如何实现您的需求。
回复 使用道具 举报
Dtttax
银牌会员   /  发表于:2024-1-5 09:22:50
6#
Ellia.Duan 发表于 2024-1-3 17:27
您好,是否可以贴出您实现的CTRL+enter快捷键相关代码,我们在此基础上调研如何实现您的需求。

  if(sheet.isEditing()){
    sheet.endEdit()
    let value = sheet.getCell(sheet.getActiveRowIndex(),sheet.getActiveColumnIndex()).value()
    sheet.getSelections().forEach(({row,col,rowCount,colCount}) => {
      for(let cell of sheet[Symbol.iterator](row, rowCount, col, colCount)){
        if(sheet.getRowVisible(cell.row)&&sheet.getColumnVisible(cell.col)){
          cell.value(value)
        }
      }
    })
  }
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-1-5 14:00:46
7#
您好,您的问题已收到,我们将调研下问题。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-1-8 16:24:48
8#
您好,在Excel中,选中一片区域,然后输入数值1,按下快捷键ctrl+enter ,
此时此片区域的值都是1 ,如下动图所示

在SpreadJS中,设置了如下代码
  1. var sheet = spread.getActiveSheet();
  2.         let command = {
  3.             canUndo: true,
  4.             execute: function (context, options, isUndo) {
  5.                 let Commands = GC.Spread.Sheets.Commands;
  6.                 options.cmd = "copyALl";
  7.                 if (isUndo) {
  8.                     Commands.undoTransaction(context, options);
  9.                     return true;
  10.                 } else {
  11.                     Commands.startTransaction(context, options);
  12.                     console.log(sheet.isEditing())
  13.                     if (sheet.isEditing()) {
  14.                         sheet.endEdit()
  15.                         let value = sheet.getCell(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex()).value()
  16.                         let rangeList = sheet.getSelections()
  17.                         for (let i = 0; i < rangeList.length; i++) {
  18.                             let range = rangeList[i]
  19.                             let {row, col, rowCount, colCount} = range;
  20.                             if (sheet.getRowVisible(row) && sheet.getColumnVisible(col)) {
  21.                                 sheet.getRange(row, col, rowCount, colCount).value(value)
  22.                             }
  23.                         }

  24.                     }
  25.                 }
  26.             },
  27.         };
  28.         let commandManager = spread.commandManager();
  29.         commandManager.register("copyALl", command);

  30.         spread.commandManager().setShortcutKey("copyALl", GC.Spread.Commands.Key.enter, true, false, false, false);
复制代码


打开附件中的html,
在公式编辑器中输入数值1,然后按下快捷键ctrl+enter ,其效果与Excel一致
在单元格中直接输入数值1,此时按下快捷键ctrl+enter,会发现单元格换行
所以复现了您的问题,我们将深入调研下此问题,问题编号:SJS-22239

ctrl+enter_spreadJS.gif
ctrl+enter_excel.gif

ctrl+enter.html

2.58 KB, 下载次数: 335

回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-1-10 09:38:47
9#
您好,经调研,您可以通过ctrl+shift+enter实现与Excel一致的功能,不需要重写相逻辑。
如在designer中,https://demo.grapecity.com.cn/SpreadJS/WebDesigner/index.html
您可以选中一片区域,输入内容,然后按下ctrl+shift+enter,可以实现您想要的效果,如下动图所示:

ctrl+shift+enter.gif
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部