找回密码
 立即注册

QQ登录

只需一步,快速开始

右手微笑
金牌服务用户   /  发表于:2023-9-13 11:59  /   查看:1731  /  回复:4
本帖最后由 Richard.Huang 于 2023-10-19 12:19 编辑



产品:SpreadJS
版本:V16.1.0


问题:复制一整行,选中一整行,此行中有合并单元格,使用‘clipboardPaste’粘贴

预期:合并单元格中不会有内容和样式粘贴进去
实际:合并单元格区域中的其他单元格,有内容和样式粘贴进去了,当将合并单元格拆分后,就会发现,其他单元格中有内容和样式
具体复现步骤见附件的视频,附件中的demo可用来复现此问题
spjsDemo.zip (30.76 KB, 下载次数: 234)

4 个回复

倒序浏览
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-9-15 14:26:52
来自 5#
您好,根据调研结果,这是我们目前的一个设计,对于SpreadJS来说,合并单元格不会清空其他单元格的样式和数据,但是Excel会清空其他单元格中的样式和数据。

1.gif625215148.png

因此对于您的这种情况,只能是参考我之前提供给您的解决方案来实现。

1、selections不一定是最终粘贴的区域,那么将您最终需要粘贴的区域进行替换即可。
2、我这边经测试,您说的公式、链接、下拉列表都是可以清除的。
image.png999516601.png
3、具体情况需要具体讨论,您说的失败的场景具体是什么场景呢?
4、我这边测试了一下,ctrl+c,ctrl+v会出现下图问题。
image.png181546019.png
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-9-13 17:33:54
沙发
您好,将Demo中指定代码修改如下即可:

  document.querySelector("#paste").addEventListener("click", function () {
    let selections = sheet.getSelections();
    let sheetName = sheet.name();
    spread.commandManager().execute({
      cmd: "clipboardPaste",
      sheetName: sheetName,
      fromSheet: clipboardHelper.copiedSheet,
      fromRanges: clipboardHelper.copiedRanges,
      pastedRanges: selections,
      isCutting: false,
      clipboardText: "",
      pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.all,
    });
    let spans = sheet.getSpans(selections[0]);
    console.log(spans);
    let range = sheet.getRange(
      selections[0].row,
      spans[0].col,
      selections[0].rowCount,
      spans[0].colCount
    );
    range.clear(GC.Spread.Sheets.StorageType.data);
    range.clear(GC.Spread.Sheets.StorageType.style);
  });

image.png263905028.png
回复 使用道具 举报
右手微笑
金牌服务用户   /  发表于:2023-9-14 14:59:38
板凳
Joestar.Xu 发表于 2023-9-13 17:33
您好,将Demo中指定代码修改如下即可:

  document.querySelector("#paste").addEventListener("click", ...

1、selections不一定是最终粘贴的区域
2、不光要清空内容和样式,公式、链接、下拉列表等都要清除
3、range.clear(GC.Spread.Sheets.StorageType.data);
    range.clear(GC.Spread.Sheets.StorageType.style);在执行完“ clipboardPaste”指令后立即执行逻辑不太对,因为有些场景会粘贴失败的,不成功就不需要执行range.clear()
4、因为使用快捷键ctrl+c,ctrl+v不会有此帖的问题,因此只需要处理手动调用“clipboardPaste”的情况,但是粘贴成功后,无法判断此次粘贴是快捷键还是手动调用“clipboardPaste”
由于上边几个问题,我觉得是不是您这边修改一下clipboardPaste的后续逻辑比较彻底
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-9-14 17:48:58
地板
了解到您这边的需求了,这边调研一下,后续有进展我会在本帖中回复您。

本帖先做保留处理了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部