找回密码
 立即注册

QQ登录

只需一步,快速开始

Samuer
金牌服务用户   /  发表于:2021-3-31 15:41  /   查看:2110  /  回复:1
本帖最后由 Samuer 于 2021-3-31 15:42 编辑
  1. registerDeleteCommand() {
  2.       const command = {
  3.         canUndo: true,
  4.         execute: function (context: GC.Spread.Sheets.Workbook, options: any, isUndo: any) {
  5.           const Commands = GC.Spread.Sheets.Commands
  6.           if (isUndo) {
  7.             Commands.undoTransaction(context, options)
  8.             return true;
  9.           } else {
  10.             context.suspendPaint()
  11.             Commands.startTransaction(context, options)
  12.             const sheet: GC.Spread.Sheets.Worksheet = context.getSheetFromName(options.sheetName)

  13.             const selections: GC.Spread.Sheets.Range[] = sheet.getSelections()

  14.             selections.forEach((selection: GC.Spread.Sheets.Range) => {
  15.               const row = selection.row < 0 ? 0 : selection.row
  16.               const col = selection.col < 0 ? 0 : selection.col
  17.               const rowCount = selection.rowCount
  18.               const colCount = selection.colCount
  19.               for (let r = 0; r < rowCount; r++) {
  20.                 for (let c = 0; c < colCount; c++) {
  21.                   const cell = sheet.getCell(row + r, col + c)
  22.                   const cellTag: EY.Tag.Cell = cell.tag() || {}
  23.                   if (cellTag.currency) {
  24.                     // 重置tag中本位币
  25.                     cellTag.currency.standardCurrencyValue = null
  26.                     cell.value(null)
  27.                   }
  28.                 }
  29.               }
  30.             })
  31.             Commands.endTransaction(context, options)
  32.             context.resumePaint()
  33.             return true
  34.           }
  35.         }
  36.       }
  37.       const commandManager = spreadVM.commandManager()
  38.       commandManager.register("customDeleteCommand", command, GC.Spread.Commands.Key.del)
  39.       commandManager.setShortcutKey("customDeleteCommand", GC.Spread.Commands.Key.del, false, false, false, false)
  40.     }
复制代码
下面是监听
  1.   public cellValueChanged(sheet: GC.Spread.Sheets.Worksheet) {
  2.     const _this = this
  3.     function valueChanged() {
  4.       try {
  5.         if (sheet.tag().tableType === EY.Tag.SheetTagEnum.TableTypeEnum.SYSTEM) {
  6.           return true
  7.         }
  8.         const activeRow: number = sheet.getActiveRowIndex()
  9.         const activeCol: number = sheet.getActiveColumnIndex()
  10.         const cellTag: EY.Tag.Cell = sheet.getTag(activeRow, activeCol) || {}
  11.         if (cellTag.action) {
  12.           _this.runAction(sheet)
  13.         }

  14.       } catch (e) {
  15.         console.error(e, 'isEditingValueChanged')
  16.       }
  17.     }

  18.     sheet.bind(GC.Spread.Sheets.Events.RangeChanged, valueChanged)

  19.     sheet.bind(GC.Spread.Sheets.Events.ValueChanged, valueChanged)
  20.   }
复制代码



1 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-31 16:23:33
沙发
您好,您未重写delete键对应的删除命令时,按下delete键实际执行的是清除单元格内容命令,此命令执行的删除行为可以被RangeChanged监听到,这与 单元格右键菜单清除项(也可以被RangeChanged监听到) 作用是一致的。 image.png269675597.png
您重写了delete键对应的删除命令,所以此时按下delete键,执行的您自定义的代码逻辑,没有触发RangeChanged事件,所以无法使用RangeChanged监听此行为。
SJS阻止了键盘事件,不能直接通过判断按键来监听。基于上述解释,实际上我们需要知道,重写的delete命令究竟执行了什么操作,再根据这一操作判断什么事件可以监听到。
所以,请您详细的描述下 registerDeleteCommand 命令中执行了什么样的操作(结合业务情况),这边看下哪个事件可以监听到此操作引起的变化。
image.png975316467.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部