Richard.Huang 发表于 2023-12-29 11:14:57

重写右键菜单实现“仅粘贴值”选项携带 Tag 信息

本帖最后由 AlexZ 于 2024-1-3 14:39 编辑

背景
很多用户有这样的需求,需要在单元格中存放一些业务逻辑需要的信息,而这些信息不能够被使用者看到。因此,我们会将这些信息放在单元格的tag中,而为了让使用者在作复制粘贴操作时也携带这些信息,就只能使用“粘贴所有”。但是会存在这种情况,用户不想要粘贴样式,只希望粘贴值,而业务人员又需要让用户粘贴时将这个tag信息一并粘贴过去,这就犯了难

原因
造成这个问题的原因是,我们的“仅“粘贴值功能就只复制粘贴了单元格的value,对于其他信息不会一并传播,这里面就包括了tag。如果希望仅复制粘贴值时能够携带tag信息,则需要重写右键菜单

解决方法
1. 重写右键菜单
2. 允许用户撤销时removetag信息
var oldClipboardPasteCommand = GC.Spread.Sheets.Commands.clipboardPaste.execute;
GC.Spread.Sheets.Commands.clipboardPaste.execute = function (context, options, isUndo) {
    var self = this;
    var fromRanges = options.fromRanges
    let pastedRanges = options.pastedRanges;

    let oldSheet = options.fromSheet
    let newSheet = context.getSheetFromName(options.sheetName)

    var Commands = GC.Spread.Sheets.Commands;
    if (isUndo) {
      Commands.undoTransaction(context, options);
      return true
    } else {
      Commands.startTransaction(context, options);
      if (options.pasteOption == 1) {
            var oldTag = oldSheet.getTag(fromRanges.row, fromRanges.col)
            newSheet.setTag(pastedRanges.row, pastedRanges.col, oldTag)
      }
      var flag = oldClipboardPasteCommand(context, options, isUndo);
      Commands.endTransaction(context, options);
      return flag;
    }
}

页: [1]
查看完整版本: 重写右键菜单实现“仅粘贴值”选项携带 Tag 信息