找回密码
 立即注册

QQ登录

只需一步,快速开始

芒果不盲

初级会员

24

主题

64

帖子

216

积分

初级会员

积分
216
芒果不盲
初级会员   /  发表于:2024-7-10 16:49  /   查看:672  /  回复:3
1金币
清除子项表内容代码

const sheet = this.spread.getSheetFromName("子项表");
      const table = sheet.tables.findByName("子项表");
      const Range = table.dataRange();
      this.spread.suspendPaint();
      table.deleteRows(0, Range.rowCount); //删除行
      table.insertRows(0, 3);



清除单位工程数内容代码

   const sheet = this.spread.getSheetFromName("单位工程数据库");
      const table = this.spread
        .getSheetFromName("单位工程数据库")
        .tables.find(0, 0);
      const Range = table.dataRange();
      sheet.deleteRows(3, Range.rowCount - 3); //删除行
      console.log("deleteRows", Math.round((new Date() - da) / 1000));
      sheet.clear(
        Range.row,
        Range.col,
        Range.rowCount,
        Range.colCount,
        GC.Spread.Sheets.SheetArea.viewport,
        GC.Spread.Sheets.StorageType.data
      );



点击清除 子项表  单位工程数据库有数据是 执行17秒清除成功

单位工程数据库没有有数据  点击清除 子项表  执行0秒 清除成功
不知道什么原因,是在electron框架中操作的
文件在附件中有没有其他人试试,是不是这样,还是只有我这样





测试11.zip

29.56 KB, 下载次数: 162

最佳答案

查看完整内容

您好,问题出在了table.insertRow和table.deleteRows上。 如果您对两个sheet采用同样的api (sheet.deleteRows),执行速度是差不多的,如下图所示 如果为子项表,进行删除行之后 ,扩大table区域,会有一部分耗时,如下图所示: 所以insertRow或者 sheet.tables.resize(table,table.range().rowCount+3,table.range().colCount)是导致删除两个表时间差的原因。 为此,您可以少删除三行,保留4行的table区域,然后 ...

3 个回复

倒序浏览
最佳答案
最佳答案
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-7-10 16:49:28
来自 4#
本帖最后由 Ellia.Duan 于 2024-7-11 10:19 编辑

您好,问题出在了table.insertRow和table.deleteRows上。

如果您对两个sheet采用同样的api (sheet.deleteRows),执行速度是差不多的,如下图所示
image.png277319335.png

如果为子项表,进行删除行之后 ,扩大table区域,会有一部分耗时,如下图所示:
image.png403033141.png

所以insertRow或者 sheet.tables.resize(table,table.range().rowCount+3,table.range().colCount)是导致删除两个表时间差的原因。

为此,您可以少删除三行,保留4行的table区域,然后清空数据,如下图所示,用时不到一秒
image.png880479736.png
代码如下:
  1. let table = sheet.tables.all()[0]

  2. let tableRange = table.range()
  3. spread.suspendPaint();
  4. sheet.deleteRows(tableRange.row+1, tableRange.rowCount-4); //删除行
  5. sheet.clear(
  6.         tableRange.row+1,
  7.         tableRange.col,
  8.         3,
  9.         tableRange.colCount,
  10.         GC.Spread.Sheets.SheetArea.viewport,
  11.         GC.Spread.Sheets.StorageType.data
  12.       );
  13. spread.resumePaint();
复制代码








回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-7-10 18:00:26
2#
您好,您是说,清除“子项表”行及数据用时17秒,清除“单位工程数据库”行及数据用时0秒。

我在17.1.0版本未能复现您的问题,如下图所示;
image.png269826659.png
清除“子项表”行及数据用时5秒。
除此之外,您可以用 sheet.deleteRows(Range.row, Range.rowCount); 来提升性能。
回复 使用道具 举报
芒果不盲
初级会员   /  发表于:2024-7-10 18:19:50
3#
Ellia.Duan 发表于 2024-7-10 18:00
您好,您是说,清除“子项表”行及数据用时17秒,清除“单位工程数据库”行及数据用时0秒。

我在17.1.0 ...

您这边打开的比我快,可能终端之间存在一点差异性能不一样, 为什么,那个单位工程数据库,里面数据那么多,用时,不超过1秒,那个子项表反而用那么长时间,用单位工程数据库那块代码一样的代码清除子项表数据也是比较慢, sheet.deleteRows并没有提升很快速度
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部