找回密码
 立即注册

QQ登录

只需一步,快速开始

jackming

初级会员

41

主题

78

帖子

307

积分

初级会员

积分
307
jackming
初级会员   /  发表于:2020-6-16 21:53  /   查看:2290  /  回复:5
表格我做过filter,比如可见行为1345行,我框选所有行,按delete会把第2行删除,怎么把第二行剔除?

5 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-6-17 10:08:09
沙发
这个原理跟Excel一样的,delete肯定会包含隐藏行的数据,因为隐藏并不代表没有,只是不显示而已。
如果要剔除,只能根据在脏数据中进行判断,然后将隐藏行的数据回写回来
回复 使用道具 举报
jackming
初级会员   /  发表于:2020-6-17 10:39:04
板凳
ClarkPan 发表于 2020-6-17 10:08
这个原理跟Excel一样的,delete肯定会包含隐藏行的数据,因为隐藏并不代表没有,只是不显示而已。
如果要 ...

是filter不是隐藏功能哦,excel这边是不会删除的呢,spread这边有没有什么删除回调,可以阻止删除之类的,我好在里面做一个数据筛选,判断是否删除

filter测试.zip

6.01 KB, 下载次数: 25

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-6-17 11:16:10
地板
如果是筛选的话,需要重写delete的删除操作,参考这个demo
https://gcdn.grapecity.com.cn/fo ... &extra=page%3D4

评分

参与人数 1满意度 +5 收起 理由
jackming + 5 很给力!

查看全部评分

回复 使用道具 举报
jackming
初级会员   /  发表于:2020-6-17 15:11:06
5#
本帖最后由 jackming 于 2020-6-17 15:26 编辑
ClarkPan 发表于 2020-6-17 11:16
如果是筛选的话,需要重写delete的删除操作,参考这个demo
https://gcdn.grapecity.com.cn/forum.php?mod= ...

这个demo可能不太符合,假如我在A列进行了筛选,在B列进行了删除,被筛选出去的行还是会被B列删除
结合您的demo,我自己已经完成了,现在分享一下,感谢
  1.   var handleDelete = {
  2.     canUndo: true,
  3.     execute: function (context, options, isUndo) {
  4.       // console.log(context, options, isUndo, context.getActiveSheet().isEditing())
  5.       var Commands = GC.Spread.Sheets.Commands;
  6.       options.cmd = "handleDelete";
  7.       if (isUndo) {
  8.         Commands.undoTransaction(context, options);
  9.         return true;
  10.       } else {
  11.         if (!context.getActiveSheet().isEditing()) {
  12.           Commands.startTransaction(context, options);
  13.           spread.suspendPaint();
  14.           var sheet = context.getActiveSheet();
  15.           var selections = sheet.getSelections();
  16.           for (var i = 0; i < selections.length; i++) {
  17.             var row = selections[i].row == -1 ? 0 : selections[i].row;
  18.             var col = selections[i].col;
  19.             var rowCount = selections[i].rowCount;
  20.             var colCount = selections[i].colCount;
  21.             for (var i = row; i < row + rowCount; i++) {
  22.               if (sheet.getRowVisible(i)) {
  23.                 for (var j = col; j < col + colCount; j++) {
  24.                   if (!sheet.getCell(i, j).locked()) {
  25.                     sheet.clear(i, j, 1, 1, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data);
  26.                   }
  27.                 }
  28.               }
  29.             }
  30.           }
  31.           options.cmd = "handleDelete";
  32.           spread.resumePaint();
  33.           Commands.endTransaction(context, options);
  34.           return true;
  35.         } else {
  36.           return false;
  37.         }
  38.       }
  39.     }
  40.   };
复制代码

复制代码

评分

参与人数 1金币 +666 收起 理由
Fiooona + 666

查看全部评分

回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-6-17 18:00:14
6#
感谢您的分享~

评分

参与人数 1满意度 +5 收起 理由
jackming + 5 很给力!

查看全部评分

组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部