找回密码
 立即注册

QQ登录

只需一步,快速开始

前端小菜鸟

初级会员

24

主题

88

帖子

266

积分

初级会员

积分
266
前端小菜鸟
初级会员   /  发表于:2023-3-20 16:56  /   查看:1507  /  回复:3
1金币
需求是 只导出部分数据


我的写法是copy了一份spread 进行sheet删除
由于 导出的是后20个sheet 我删除代码写的是循环删除 0 到20
结果 删除的不是前20页

我现在是这样写的

let sheetNameArr = [二十和sheet名称数组]
    for (let index = 0; index < sheetNameArr.length; index++) {
      let xuhao = this.spreadCopy.getSheetIndex(sheetNameArr[index]);
      this.spreadCopy.removeSheet(xuhao);
    }



这样执行特别慢 导致卡死。

想问 有其他办法解决么?
为什么直接写循环0 到20  删除的不是前20 个sheet???

最佳答案

查看完整内容

您好, 猜测原因如下: 您传参0删除了sheet1,此时的sheet2就是第一个sheet了,即index为0。再传参1,实质上删除就是sheet3了。 这是数组删除元素的常见问题,您可以考虑逆向删除,具体可以网上搜索下资料。 如果猜测有误,请提供一个可复现的demo,这边结合代码调研下问题原因。 另,您可以在删除sheet前后加上suspendPaint/resumePaint 方法提升渲染性能。 示例如下:

3 个回复

倒序浏览
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-3-20 16:56:17
来自 2#
您好,
猜测原因如下:
您传参0删除了sheet1,此时的sheet2就是第一个sheet了,即index为0。再传参1,实质上删除就是sheet3了。
这是数组删除元素的常见问题,您可以考虑逆向删除,具体可以网上搜索下资料。
如果猜测有误,请提供一个可复现的demo,这边结合代码调研下问题原因。

另,您可以在删除sheet前后加上suspendPaint/resumePaint 方法提升渲染性能。
示例如下:
  1. spread.suspendPaint();
  2. for(var i = 0; i < 3; i++) {
  3.     spread.removeSheet(i)
  4. }
  5. spread.resumePaint();
复制代码
回复 使用道具 举报
前端小菜鸟
初级会员   /  发表于:2023-3-21 09:09:02
3#
Lynn.Dou 发表于 2023-3-20 16:56
您好,
猜测原因如下:
您传参0删除了sheet1,此时的sheet2就是第一个sheet了,即index为0。再传参1,实 ...

您好。我现在是从50 多个sheet里面删除20多个sheet,速度太慢了,有什么提升删除速度的办法么?
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-3-21 09:40:48
4#
试下上楼回复中的方案,删除sheet前后加上suspendPaint/resumePaint 方法提升下渲染性能。

学习指南相关链接:
https://demo.grapecity.com.cn/sp ... ook/painting/purejs
image.png239251708.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部