找回密码
 立即注册

QQ登录

只需一步,快速开始

汇新泓博
初级会员   /  发表于:2022-11-3 14:36  /   查看:1853  /  回复:5
1金币
使用setArray设置1000多行40列 数据超时太多如何处理
image.png646001281.png
image.png193812255.png


sheet.setArray(range.row, range.col, valList);


最佳答案

查看完整内容

也不一定是数据的问题,有影响的原因可能有两个 一个是setArray设置的具体数组数据,也就是你代码中的valList,这个你可以导出一个json数据 另一个是setArray前的workbook,如果有一些公式或者其他的东西引用你设置的单元格区域,也会因为计算等情况导致性能变差甚至卡死。这个也可以通过toJSON导出为json字符串, 你可以先自己把这两个数据抽出来新建一个workbook通过fromJSON加载回去。然后setArray来验证看看能不能重 ...

5 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-3 14:36:23
来自 7#
也不一定是数据的问题,有影响的原因可能有两个

一个是setArray设置的具体数组数据,也就是你代码中的valList,这个你可以导出一个json数据

另一个是setArray前的workbook,如果有一些公式或者其他的东西引用你设置的单元格区域,也会因为计算等情况导致性能变差甚至卡死。这个也可以通过toJSON导出为json字符串,

你可以先自己把这两个数据抽出来新建一个workbook通过fromJSON加载回去。然后setArray来验证看看能不能重现问题,如果不能重现的话,那么可能不一定是setArray的原因了


回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-3 16:05:21
2#
本帖最后由 Richard.Ma 于 2022-11-3 16:06 编辑

可以尝试一下Suspend/Resume Paint,这个应该可以减少时间,减少了UI渲染占用的时间

  1. sheet.suspendPaint();
  2. sheet.setArray(range.row, range.col, valList);
  3. sheet.resumePaint();
复制代码
回复 使用道具 举报
汇新泓博
初级会员   /  发表于:2022-11-3 18:12:02
4#
Richard.Ma 发表于 2022-11-3 16:05
可以尝试一下Suspend/Resume Paint,这个应该可以减少时间,减少了UI渲染占用的时间

加了  耗时45秒左右
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-3 18:30:09
5#
可以发一个重现问题的demo上来,我们来协助具体分析一下。从你描述的数据量来看应该不会这么久 的
回复 使用道具 举报
汇新泓博
初级会员   /  发表于:2022-11-4 10:01:31
6#
Richard.Ma 发表于 2022-11-3 18:30
可以发一个重现问题的demo上来,我们来协助具体分析一下。从你描述的数据量来看应该不会这么久 的

额  抽出数据就不出现这个问题了。但是在项目中一步步的打印确实卡在setArray这里。不知道具体是什么问题导致的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部