找回密码
 立即注册

QQ登录

只需一步,快速开始

鹅鹅鹅blue
金牌服务用户   /  发表于:2024-2-26 13:33:25
11#
按照您的操作粘贴是没有空格的,但有以下2个疑问:
1、为何是点击完修改粘贴逻辑按钮后,再执行粘贴操作就不会有空格了,为何处理逻辑放在mounted中不生效。因为实际项目中是在页面中直接粘贴,而不会点击个按钮再触发粘贴操作
2、原来在excel中数据比如是1.0000,粘贴到spread中为何为1了,而现在增加这段逻辑后,粘贴到spread中仍然为1.0000
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-26 14:10:23
12#
如果要放在mounted里面的话,请参考以下代码:

  1. mounted() {
  2.   let spread = this.$refs.spread.getSpread();

  3.   let copiedText = "";
  4.   let clipPasted = false;
  5.   let pasteRange;

  6.   spread.bind(GC.Spread.Sheets.Events.ClipboardPasted, function (sender, args) {
  7.     console.log("bind");

  8.     clipPasted = false;

  9.     if (args.pasteData.html != "" && args.pasteData.text != "") {
  10.       clipPasted = true;
  11.       pasteRange = args.cellRange;
  12.       console.log("pasteRange", pasteRange);
  13.     }

  14.     if (!navigator.clipboard) {
  15.       setTextArray(copiedText);
  16.     }
  17.   });

  18.   document.querySelector(".preview-excel").addEventListener('paste', function (event) {
  19.     console.log("paste event");
  20.     if (!navigator.clipboard) {
  21.       if (event.clipboardData) {
  22.         // Classic Edge
  23.         copiedText = event.clipboardData.getData('text');
  24.       } else {
  25.         // IE11
  26.         copiedText = window.clipboardData.getData('text');
  27.       }
  28.       return;
  29.     }
  30.     if (!clipPasted) return;
  31.     // Chrome, FireFox
  32.     let paste = (event.clipboardData || window.clipboardData).getData('text');
  33.    
  34.     setTextArray(paste);
  35.   });

  36.   function setTextArray(paste) {
  37.     var textArray = [];
  38.     var copyText = paste.split('\n');

  39.     for (var i = 0; i < pasteRange.rowCount; i++) {
  40.       var copyRow = copyText[i].replace(/\r/, "").split('\t');
  41.       for (var j = 0; j < copyRow.length; j++) {
  42.         if (copyRow[j] === "") {
  43.           copyRow[j] = null;
  44.         }
  45.       }
  46.       textArray.push(copyRow);
  47.     }
  48.     console.log("pasteRange.row", pasteRange.row);
  49.     console.log("pasteRange.col", pasteRange.col);
  50.     console.log("textArray", textArray);
  51.     spread.getActiveSheet().setArray(pasteRange.row, pasteRange.col, textArray);
  52.   };
  53. },
复制代码


关于第二个问题,代码中的逻辑是将粘贴的内容转换为了文本进行了处理后再设置到Sheet中,所以仍为1.0000,具体您可以看一下textArray这个变量中存储的值。

image.png18580321.png
回复 使用道具 举报
鹅鹅鹅blue
金牌服务用户   /  发表于:2024-2-26 14:33:36
13#
若excel中设为数值保留三位小数 2.000,那么粘贴在spreadjs中正常应该是显示2.000还是2
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-26 15:57:58
14#
就目前最新版本来说,如果在Excel中输入2,然后设置保留三位小数后,复制该单元格到SpreadJS中将显示为2。
回复 使用道具 举报
鹅鹅鹅blue
金牌服务用户   /  发表于:2024-2-27 09:11:44
15#
那么现在的空格粘贴逻辑会导致显示仍是1.000,值也仍然是1.000,针对这个新引入的问题怎么解决
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-27 10:15:57
16#
我这边修改了一下相关的代码,请您替换后再试试看能否满足您的需求。

Preview.vue

14.02 KB, 下载次数: 542

回复 使用道具 举报
鹅鹅鹅blue
金牌服务用户   /  发表于:2024-2-27 10:28:26
17#
好的 我试试看
回复 使用道具 举报
鹅鹅鹅blue
金牌服务用户   /  发表于:2024-2-27 10:44:51
18#
我发现这段代码跟您第一次提供的解决方法是一样的,这需要用按钮来触发,但项目中不会存在按钮来触发粘贴事件,若放在mounted中,这段代码并没有解决粘贴空格问题,若按照后来提供的放在mounted中的那段代码,将会新引入显示1.000的问题。
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-27 11:19:57
19#
您好,不需要关注changePrint这个方法,这一块代码已经废弃了我还没有删掉,需要关注的是mounted这个方法,我修改了setTextArray这个函数,我本地测试了一下是没有问题的。

动画 (1).gif802743224.png
回复 使用道具 举报
鹅鹅鹅blue
金牌服务用户   /  发表于:2024-2-27 13:20:44
20#
好滴 我试一下 感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部