找回密码
 立即注册

QQ登录

只需一步,快速开始

spreadjs666
金牌服务用户   /  发表于:2024-10-9 11:41  /   查看:207  /  回复:10
1金币
本帖最后由 Ellia.Duan 于 2024-10-9 17:46 编辑

  1. const designer = new GC.Spread.Sheets.Designer.Designer(document.getElementById("gc-designer-container"));
  2. const spread = designer.getWorkbook();
  3. const sheet = spread.getActiveSheet();
  4. spread.options.scrollByPixel = true;
  5. spread.options.scrollbarShowMax = true;
  6. spread.options.scrollbarMaxAlign = true;
  7. spread.options.allowExtendPasteRange = true;
  8. function myClipboardPaste(sheetName,fromSheet,fromRanges,pastedRanges,isCutting,clipboardHtml,clipboardText,clipboardImage,pasteOption) {
  9.      const pasteParams = {
  10.       sheetName: sheetName,
  11.       fromSheet: fromSheet,
  12.       fromRanges: fromRanges,
  13.       pastedRanges: pastedRanges,
  14.       isCutting: isCutting,
  15.       clipboardText: clipboardText,
  16.       pasteOption: pasteOption,
  17.          cmd: "clipboardPaste",
  18.     }
  19.     if (clipboardHtml) {
  20.       pasteParams.clipboardHtml = clipboardHtml;
  21.     }
  22.     if (clipboardImage) {
  23.       pasteParams.clipboardImage = clipboardImage;
  24.     }
  25.      spread.commandManager().execute(pasteParams);
  26.   }

  27. myClipboardPaste('Sheet1', undefined, undefined,[new GC.Spread.Sheets.Range(1,1,1,1)], false, `"<html xmlns:v="urn:schemas-microsoft-com:vml"
复制代码

(代码中的html和text是从剪切板中解析到的)



复制源:Microsoft Excel
使用快捷键粘贴为一个单元格
使用clipboardPaste 粘贴为两个单元格
image.png531707763.png





10 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-10-9 17:50:32
沙发
您好,可以将相关代码放到一个文件夹中上传上来,避免格式问题,
以及,稍微调整了下您的代码,在控制台执行,结果是什么呢?
image.png241064452.png
我该如何复现您的问题?
回复 使用道具 举报
spreadjs666
金牌服务用户   /  发表于:2024-10-10 10:54:42
板凳
Ellia.Duan 发表于 2024-10-9 17:50
您好,可以将相关代码放到一个文件夹中上传上来,避免格式问题,
以及,稍微调整了下您的代码,在控制台执 ...

您好,上传的代码被截断了,可以查看这个附件,直接复制粘贴代码到控制台复现。

clipboardpaste问题.js

3.92 KB, 下载次数: 13

回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-10-10 11:10:47
地板
您好,如果代码是:
image.png233299864.png

结果如下:
image.png539714049.png
如果代码是:
image.png961569824.png
结果如下:
image.png592978515.png

想问下,您的clipboardText是如何获取的呢?

我将此文字复制到Excel中,然后在SpreadJS中开启事件监听,此时粘贴,获取到的clipboardText是
image.png52629698.png
放到您的代码中也是没有问题的。
回复 使用道具 举报
spreadjs666
金牌服务用户   /  发表于:2024-10-10 11:57:12
5#
Ellia.Duan 发表于 2024-10-10 11:10
您好,如果代码是:

您好,text内容为解析剪切板中的dom获取innerText的值
  1. document.addEventListener('paste', function(event) {
  2.   // 阻止默认粘贴行为
  3.   event.preventDefault();
  4. console.log('=========================222222')
  5.     let htmlData = '';
  6.   // 从DataTransfer对象获取HTML数据
  7.   if (event.clipboardData && event.clipboardData.items) {
  8.     for (var i = 0; i < event.clipboardData.items.length; i++) {
  9.       if (event.clipboardData.items[i].type.indexOf('html') !== -1) {
  10.         htmlData = event.clipboardData.getData('text/html');
  11.         // 使用或设置HTML数据
  12.         console.log('粘贴的HTML数据为:', htmlData);
  13.         break;
  14.       }
  15.     }
  16.   }
  17.   let html = new DOMParser().parseFromString(htmlData, 'text/html')
  18.     console.log('td内容为:', html.querySelector('td').innerText)
  19. });
复制代码


回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-10-10 18:02:09
6#
本帖最后由 Ellia.Duan 于 2024-10-11 12:24 编辑

您好,需要深入调研下,有进展会及时联系您。SJS-26729
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-10-12 11:58:37
7#
您好,为了处理各种空格问题,SpreadJS内部做了很多处理,而这些处理可以从ClipboardPasting中的pasteData中获取。

我做了以下测试:
1、从附件中的excel文件中,复制了单元格B3
image.png158191832.png
2、在浏览器中打开附件中的html文件
3、将1步骤复制的内容粘贴在任意一个单元格
4、点击按钮,执行
  1. myClipboardPaste(sheet.name(), null, null,[new GC.Spread.Sheets.Range(1,1,1,1)], false, clipData.htmlData, clipData.innerText,null, GC.Spread.Sheets.ClipboardPasteOptions.all)
复制代码
是可以成功的。

而上述代码中clipData是可以从ClipboardPasting获取。

clipboardHtm.html

5.81 KB, 下载次数: 9

工作簿1.xlsx

9 KB, 下载次数: 9

回复 使用道具 举报
spreadjs666
金牌服务用户   /  发表于:5 天前
8#
Ellia.Duan 发表于 2024-10-12 11:58
您好,为了处理各种空格问题,SpreadJS内部做了很多处理,而这些处理可以从ClipboardPasting中的pasteData ...

请问要如何处理才能展示正确?因为我们要处理跨表格、跨app粘贴一些超链接、富文本等,因此需要进行一些特殊处理,不进行clipboardpasting方法,直接调用clipboardPaste方法进行粘贴。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:5 天前
9#
这部分内容属于SpreadJS源码层面的知识了,我们对这部分内容进行保留。
回复 使用道具 举报
spreadjs666
金牌服务用户   /  发表于:5 天前
10#
Ellia.Duan 发表于 2024-10-16 17:57
这部分内容属于SpreadJS源码层面的知识了,我们对这部分内容进行保留。

您好,我们最终使用的是框架cmd:clipboardPaste方法, 但传入的参数和渲染的内容不符合预期,所以期望spreadjs给出具体的更改方案,本质上是对cmd:clipboardPaste调用的疑问,期望得到渲染与输入一致的的符合预期的处理方案
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部