找回密码
 立即注册

QQ登录

只需一步,快速开始

Dtttax

银牌会员

265

主题

659

帖子

2110

积分

银牌会员

积分
2110
Dtttax
银牌会员   /  发表于:2019-1-9 11:57  /   查看:6580  /  回复:10
我们自己的类似excle的内部软件,选中几列copy 然后ctrol+v 粘贴 如图


image.png643282165.png

然后再ie ClipboardPasted 方法获取的值为
image.png250339659.png


chrome获取的值为
image.png606725158.png

这种怎么让ie也和chrome获取的值一样
image.png644097900.png

10 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-1-9 14:31:08
沙发
您好,我这边测试了一下,使用的版本号是:Spread JS V12.0.4

使用的代码是:

  1.     $(document).ready(function () {
  2.         var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));

  3.         spread.bind(GC.Spread.Sheets.Events.ClipboardPasted, function (s, e) {
  4.             console.log(e);
  5.         });
  6.         spread.bind(GC.Spread.Sheets.Events.ClipboardPasting, function (s, e) {
  7.             console.log(e);
  8.         });
  9.     });
复制代码


Chrome 版本 71.0.3578.98(正式版本) (64 位):

image.png467627257.png

IE 版本 11.472.17134.0:

image.png837578124.png

edge 版本 € 42.17134.1.0 Microsoft EdgeHTML 17.17134

image.png251185607.png

数据来源:Excel版本
image.png131393431.png
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-1-9 14:32:53
板凳
很抱歉在以上环境中没能重现您的问题,

麻烦您能够提供一个重现步骤,我们重现一下问题后,排查一下问题原因。

如果如您所说是在您的类似excle的内部软件中能重现,

那可能得根据浏览器做一个处理了。
回复 使用道具 举报
Dtttax
银牌会员   /  发表于:2019-1-9 16:19:12
地板
本帖最后由 Dtttax 于 2019-1-9 16:20 编辑

excel copy没问题,我们内部软件在ie里面重现就是类似于在记事本的数据插入进去,就像下面的截图内容这样copy成两行两列,但是这种方式怎么能判断成两行两列,是根据文件内容来解析?如图记事本的内容:

image.png467657470.png
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-1-9 17:44:53
5#
Dtttax 发表于 2019-1-9 16:19
excel copy没问题,我们内部软件在ie里面重现就是类似于在记事本的数据插入进去,就像下面的截图内容这样co ...

您好,就拿您举的这个纯文本的例子来说,

test 和 1234 之间如果是Tab符号,也就是说\t时,

粘贴进Spread JS后会被当成两列单元格的值来处理。

而空格符就会被当成一个单元格来处理。

在粘贴操作时,ClipboardPasting 中可以看到pasteData,

却无法在事件中进行修改,因此还需要思考一下别的方案来解决这个问题。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-1-9 18:02:09
6#
您好,这个问题我在这边复现了,在纯文本粘贴时,

\t在IE的剪贴板中会被解析为空格,

这个问题我这边需要咨询一下研发这边,明天给您回复。

本帖状态我先改为“未处理”。
回复 使用道具 举报
Dtttax
银牌会员   /  发表于:2019-1-11 15:36:34
7#
老哥,这个粘贴的方法怎么弄好。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-1-11 18:39:26
8#
Dtttax 发表于 2019-1-11 15:36
老哥,这个粘贴的方法怎么弄好。

您好,这个问题研发调研给出的结论是,在无格式粘贴时,IE和Chrome对粘贴板中的\t处理方式不同,

Spread JS作为前端框架,只能被动接收浏览器剪贴板的内容,IE给出了不同的内容导致处理的方式不同。

我这边需要跟您确认两个问题,

1、您是否设置了allowCopyPasteExcelStyle为false?

您可以通过下面代码来查看:

  1. var spread = GC.Spread.Sheets.findControl("ss");
  2. spread.options.allowCopyPasteExcelStyle;
复制代码


2、您从您的内部类Excel软件中,向Excel中拷贝数据时,行为是怎样的?
回复 使用道具 举报
Dtttax
银牌会员   /  发表于:2019-1-11 22:25:10
9#
1、spread.options.allowCopyPasteExcelStyle; 这个没有设置为false,
2、拷贝数据时候都是选中那几条数据,然后右键复制或者CTRL+C,然后再spread表单里面点中第一列的某一格单元格,CTRL+V粘贴
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-1-14 11:07:52
10#
您好,allowCopyPasteExcelStyle设置为true时,是可以带入Excel的格式的,

但是您内部类Excel工具并没有把格式带入到系统剪贴板中。

这样的话,Spread JS只能通过浏览器的剪贴板获取纯文本数据,

以纯文本数据中的\n作为行的分隔符,\t作为列分隔符。

在Chrome中,浏览器剪贴板可以把\t正常给SpreadJS,但是在IE中,IE自动把\t变成空格了。

如图,在IE中:

image.png373666686.png

text的值是123空格123换行123空格123这样的格式。

在Chrome中:

image.png347381896.png

后两个123之间是\t

前端语言没有直接访问系统剪贴板的权限,只能通过浏览器剪贴板获取粘贴数据。

所以这个问题没法修,只能根据您的业务逻辑来work around解决。

解决思路是:当您的单元格中没有空格符时,可以在ClipboardPasting事件中,

手动解析pasteData的text,把空格当成列分隔符,换行当成行分隔符,

利用setArray来把值设置到对应区域,然后把cancel设置为true即可,

稍后我会提供一个Demo。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部