找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Huang SpreadJS 开发认证

超级版主

43

主题

3222

帖子

4999

积分

超级版主

Rank: 8Rank: 8

积分
4999

SpreadJS 认证SpreadJS 高级认证

Richard.Huang SpreadJS 开发认证
超级版主   /  发表于:2023-12-29 11:14  /   查看:1538  /  回复:0
本帖最后由 AlexZ 于 2024-1-3 14:39 编辑

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

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

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

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

  8.     var Commands = GC.Spread.Sheets.Commands;
  9.     if (isUndo) {
  10.         Commands.undoTransaction(context, options);
  11.         return true
  12.     } else {
  13.         Commands.startTransaction(context, options);
  14.         if (options.pasteOption == 1) {
  15.             var oldTag = oldSheet.getTag(fromRanges[0].row, fromRanges[0].col)
  16.             newSheet.setTag(pastedRanges[0].row, pastedRanges[0].col, oldTag)
  17.         }
  18.         var flag = oldClipboardPasteCommand(context, options, isUndo);
  19.         Commands.endTransaction(context, options);
  20.         return flag;
  21.     }
  22. }
复制代码


粘贴值时携带tag.html

5.01 KB, 下载次数: 127

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部