找回密码
 立即注册

QQ登录

只需一步,快速开始

spreadjs666
金牌服务用户   /  发表于:2024-5-8 17:51  /   查看:5013  /  回复:16
1金币
本帖最后由 Richard.Huang 于 2024-5-29 11:53 编辑

产品:SpreadJS
版本:V17
调研编号:SJS-24161

自定义command中调用了cmd:clipboardPaste 后产生了两个撤销栈
  1. spread.commandManager().register("selfPaste", {
  2.     spread.commandManager().execute({
  3.     cmd: clipboardPaste,
  4.     });
  5. });
复制代码
如何修改才能只产生一个撤销栈?

最佳答案

查看完整内容

您好,经调研,您可以参考附件中的代码来实现将原生的Command和自定义的Command合并为一个Command,实现一次撤销的效果。

16 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-5-8 17:51:28
来自 13#
您好,经调研,您可以参考附件中的代码来实现将原生的Command和自定义的Command合并为一个Command,实现一次撤销的效果。

组合内部和自定义Command只生成一个撤销栈.js

2.93 KB, 下载次数: 2204

回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-5-9 09:27:31
2#
您好,selfPaste这个command中您做了什么操作?就仅仅是执行了一下clipboardPaste吗?
回复 使用道具 举报
spreadjs666
金牌服务用户   /  发表于:2024-5-9 14:06:07
3#
Joestar.Xu 发表于 2024-5-9 09:27
您好,selfPaste这个command中您做了什么操作?就仅仅是执行了一下clipboardPaste吗?

使用
sheet.getCell(i,j).backgroundImage("");
      sheet.getCell(i,j).tag('');
对单元格的背景和tag进行了一些处理
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-5-9 15:23:57
4#
您好,了解您的使用场景了,产生两个撤销的原因是因为执行了两个Command,目前暂时没有相关的方案能够将两个Command糅合在一起只产生一个撤销。
回复 使用道具 举报
spreadjs666
金牌服务用户   /  发表于:2024-5-9 15:27:58
5#
Joestar.Xu 发表于 2024-5-9 15:23
您好,了解您的使用场景了,产生两个撤销的原因是因为执行了两个Command,目前暂时没有相关的方案能够将两 ...

请问有什么可以替代的方案吗?
本质上是想进行表格内的复制粘贴,copyto方法只能进行同sheet的复制粘贴,所以用不了
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-5-9 15:32:31
6#
没有完美的替代方案,可以通过重写paste命令将部分逻辑代码封装在paste命令中,但是这样的做的缺点是额外的逻辑将无法被撤销。

  1. let pasteCommand = spread
  2.   .commandManager()
  3.   .getCommand(GC.Spread.Sheets.Designer.CommandNames.Paste);
  4. let oldExecute = pasteCommand.execute;
  5. pasteCommand.execute = function (context, propertyName, args) {
  6.   let sheet = context.getActiveSheet();
  7.   sheet.getCell(0, 0).value(123);

  8.   oldExecute.call(this, context, propertyName, args);
  9. };
复制代码


除此以外, 您也可以完全重新建立一个Command来实现您的需求。
回复 使用道具 举报
spreadjs666
金牌服务用户   /  发表于:2024-5-9 15:34:03
7#
Joestar.Xu 发表于 2024-5-9 15:32
没有完美的替代方案,可以通过重写paste命令将部分逻辑代码封装在paste命令中,但是这样的做的缺点是额外的 ...

现在的方案就是重新建立一个Command来实现,但是没有找到合适的api去执行可跨表格的复制粘贴
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-5-9 17:30:33
8#
您好,考虑到产品本身的设计,这边也没有更好的方案了。
回复 使用道具 举报
spreadjs666
金牌服务用户   /  发表于:2024-5-9 19:22:30
9#
Joestar.Xu 发表于 2024-5-9 17:30
您好,考虑到产品本身的设计,这边也没有更好的方案了。

您好,我们提出这个问题主要是为了解决单元格图片的复制粘贴。
现在市场上的excel大部分都支持了单元格图片的逻辑,但spread并没有cmd可以直接调用,因此我们使用了backgroundImage的方法进行单元格图片的展示。但当包含用户选择仅粘贴格式时,仍需自行单独处理包含单元格图片的单元格,所以需要在原有的cmd上添加一些逻辑,导致了以上问题的产生。
从产品功能来讲,这是一个非常常见且使用率很高的功能,因此期望spreadjs能够给出一个友好的解决方案,感谢。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部