请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

CinYung

注册会员

18

主题

57

帖子

155

积分

注册会员

积分
155
CinYung
注册会员   /  发表于:2019-11-18 19:27  /   查看:3839  /  回复:2

复制代码


我需要自己判断,某些单元格是否可以剪切,并在剪切后执行一些操作。
所以。我重写了Command.cut.execute方法,但是这样导致,剪切后,只复制到了第一个单元格的数据。
示例代码如下:

  1.   const fun = function (sheet, sel, callback) {
  2.                     // 判断是否可以剪切
  3.             for (let iRow = sel.row; iRow < sel.row + sel.rowCount; iRow++) {
  4.                     for (let iCol = sel.col; iCol < sel.col + sel.colCount; iCol++) {
  5.                         const style = sheet.getStyle(iRow, iCol);
  6.                         if (style.locked) {
  7.                             toastr.error('不可剪切');
  8.                             return;
  9.                         }
  10.                     }
  11.             }                       
  12.                     callback();
  13.                 }
  14.                
  15.                 const cut = spreadNS.Commands.cut.execute;
  16.         spreadNS.Commands.cut.execute = function (context, options, isUndo) {
  17.             const self = this, sheet = context.getActiveSheet();
  18.             const sels = sheet.getSelections();
  19.             const sel = sels ? sels[0] : null;
  20.             if (sel) {
  21.                 return fun(sheet, sel, function () {
  22.                     spreadNS.Commands.copy.execute(context, options, isUndo);
  23.                 });
  24. }
  25.         }
复制代码

如果把callback前的代码注释掉,就可以正常剪切到全部数据
但是有这些代码,就只能剪切到选中的第一个单元格的数据
PS:我实际判断剪切的代码不是这样的,这只是为了在callback前添加一些判断代码而已。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

2 个回复

CinYung
注册会员   /  发表于:2019-11-18 19:35:06
沙发
同样的代码,如果不使用ctr+x剪切,自己使用
spread.commandManager().execute({
    cmd: 'cut', sheetName: spread.getActiveSheet().name()
});来进行剪切,不会出现只剪切到第一个单元格的问题。但是这样只能在spread之间粘贴数据。
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2019-11-19 13:56:46
板凳
针对您的代码做了一些修改请查看:
  1.                 const fun = function (sheet, sel, callback) {
  2.             let sheet1 = spread.getActiveSheet();
  3.                     // 判断是否可以剪切
  4.             for (let iRow = sel.row; iRow < sel.row + sel.rowCount; iRow++) {
  5.                     for (let iCol = sel.col; iCol < sel.col + sel.colCount; iCol++) {
  6.                         
  7.                         let style = sheet1.getActualStyle(iRow, iCol);
  8.                         if (style && style.locked) {
  9.                             // toastr.error('不可剪切');
  10.                             alert('不可剪切')
  11.                             return;
  12.                         }
  13.                     }
  14.             }                       
  15.                     callback();
  16.                 }
复制代码
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部