找回密码
 立即注册

QQ登录

只需一步,快速开始

芒果不盲

初级会员

24

主题

64

帖子

216

积分

初级会员

积分
216

[已处理] 删除行,速度慢

芒果不盲
初级会员   /  发表于:2024-8-19 11:21  /   查看:963  /  回复:5
1金币




我这边需要删除固定列,,值有汇总所在的那一行,删除特别慢,会造成像卡死一样看不到头 setRowVisible就不会像删除一样那么慢
有没有什么知道行下标,批量删除的方法,或者让删除快一点
附件带了我需要删除行的文件内容


  const activeSheet = spread.getSheetFromName('单位工程成本书');
  setSheetVisible(activeSheet, 2);
  setSheetVisible(activeSheet, 3);
  setSheetVisible(activeSheet, 4);
  setSheetVisible(activeSheet, 5);
  setSheetVisible(activeSheet, 6);





export function setSheetVisible(sheet, columnIndex) {
  var count = sheet.getRowCount(GC.Spread.Sheets.SheetArea.viewport);
  var array = sheet.getArray(0, columnIndex, count, 1, false);
  let num = 0;
  for (var i = 0; i < count - 1; i++) {
    if (array[i][0] !== null) {
      if (array[i].toString().includes("汇总")) {
        sheet.deleteRows(i - num, 1);
        num++;
      }
    }
  }
}



111.zip

176.71 KB, 下载次数: 127

最佳答案

查看完整内容

我这边逻辑会多一些,我用getArray获取数组,操作数组删除不需要的数据, 然后setArray 这个实现了了功能,比删除了好用,用时也比较快,可以关了这个问题了

5 个回复

倒序浏览
最佳答案
最佳答案
芒果不盲
初级会员   /  发表于:2024-8-19 11:21:30
来自 5#
Wilson.Zhang 发表于 2024-8-19 15:56
我使用跟您一样的代码运行,删除第二列123条数据的时间是0.076秒,删除第三列123条数据的时间是0.099秒, ...

我这边逻辑会多一些,我用getArray获取数组,操作数组删除不需要的数据, 然后setArray 这个实现了了功能,比删除了好用,用时也比较快,可以关了这个问题了

评分

参与人数 1满意度 +5 收起 理由
pixiu + 5

查看全部评分

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-19 13:31:45
2#
您好!删除后页面会重新绘制,如果涉及的行列数量较多,会出现页面卡顿的现象。可以在删除前停止绘制,待删除完成后再恢复绘制,参考如下代码:
  1. //  暂停绘制
  2. sheet.suspendPaint();
  3. //  恢复绘制
  4. sheet.resumePaint();
复制代码


关于暂停绘制与恢复绘制,请参考官网文档了解详情:https://demo.grapecity.com.cn/spreadjs/help/docs/BestPractices/UsingsuspendPaintandresumePaint
回复 使用道具 举报
芒果不盲
初级会员   /  发表于:2024-8-19 14:43:52
3#
Wilson.Zhang 发表于 2024-8-19 13:31
您好!删除后页面会重新绘制,如果涉及的行列数量较多,会出现页面卡顿的现象。可以在删除前停止绘制,待删 ...

我用 sheet.setRowVisible 123条花费了1.57秒



image.png143720091.png
这个是删除花费时间 我有写suspendPaint
开始删除一个花费一秒后来,越来越慢,到爹69个的时候删除一个花费6-7秒
我这表需要删除的行数实际上已经上千了这个方法 好像不太行


image.png168282775.png
image.png78189391.png
image.png498232421.png

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-19 15:56:43
4#
芒果不盲 发表于 2024-8-19 14:43
我用 sheet.setRowVisible 123条花费了1.57秒

我使用跟您一样的代码运行,删除第二列123条数据的时间是0.076秒,删除第三列123条数据的时间是0.099秒,删除第四列985条数据的时间是0.418秒,删除第五列1074条数据的时间是0.422秒,删除第六列1078条数据的时间是0.389秒,均在一秒以内。我用的版本是17.1.3,您使用的是什么版本,不排除和版本以及电脑运行环境有关。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-21 15:43:48
6#
芒果不盲 发表于 2024-8-21 15:05
我这边逻辑会多一些,我用getArray获取数组,操作数组删除不需要的数据, 然后setArray 这个实现了了功能,比 ...


好的。那就结贴了,如有问题,欢迎继续发帖沟通。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部