找回密码
 立即注册

QQ登录

只需一步,快速开始

晓名

初级会员

22

主题

71

帖子

307

积分

初级会员

积分
307
晓名
初级会员   /  发表于:2024-2-18 17:42  /   查看:837  /  回复:11
本帖最后由 Richard.Huang 于 2024-2-22 11:35 编辑

产品:SpreadJS
版本:V16.2.6

运行出现这个错误提示: image.png649566344.png
我的代码是如下:
  1. for(let index in sheets) {
  2. let sheet = spread.getSheet(index);
  3. sheet.suspendPaint();
  4. // do something
  5. sheet.resumePaint();
  6. }
复制代码
我认为是否因为写在循环里边导致的,不知是否是这样导致?

我把spread.suspendpaint()包在for外边可否解决?

11 个回复

倒序浏览
前端小白
注册会员   /  发表于:2024-2-18 18:16:46
沙发
这要看你for-in中的sheets是什么了, 如果是json里的sheets节点。
那么示例代码中的index实际是sheet name,而不是sheet index。
然后导致spread.getSheet(sheetName)拿不出sheet来,对null进行操作然后报错

如果sheets是spread.sheets,那么index就是sheets array的下标,理论没啥问题,但是为啥不直接用for循环?或者forEach?

另,最好在循环外使用spread.suspendPaint,这样总体代码只重绘一次。而示例代码中,有多少sheet,就会重绘多少次。
回复 使用道具 举报
晓名
初级会员   /  发表于:2024-2-18 18:18:36
板凳
前端小白 发表于 2024-2-18 18:16
这要看你for-in中的sheets是什么了, 如果是json里的sheets节点。
那么示例代码中的index实际是sheet name ...

for-in就是sheet下标index
回复 使用道具 举报
前端小白
注册会员   /  发表于:2024-2-18 18:42:18
地板
那咱先不考虑性能,用forEach他不香?都不用spread再拿一遍
除非调用getSheet的spread和你for-in的sheets的spread都不是一个

如果这,你就要查业务了。
  1. spread.sheets.forEach((sheet, index) => {
  2.     sheet.suspendPaint();
  3.     //do what you want
  4.     sheet.resumePaint();
  5. })
复制代码

评分

参与人数 1金币 +200 收起 理由
Joestar.Xu + 200 赞一个!

查看全部评分

回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-19 09:29:13
5#
您好,请参考上述回复看能否解决您的问题,如仍不能,请您上传一个可以复现您问题的Demo,我们这边根据您的实际代码调研一下。
SpreadJS 17.0.8 | GcExcel 7.1.0 已发布~
回复 使用道具 举报
晓名
初级会员   /  发表于:2024-2-19 10:04:17
6#
前端小白 发表于 2024-2-18 18:42
那咱先不考虑性能,用forEach他不香?都不用spread再拿一遍
除非调用getSheet的spread和你for-in的sheets ...

你可能没看懂我的意思:代码可以简化如下:
  1. for (let i = 0; i < n; i++) {
  2. let sheet = spread.getSheet(index);
  3. sheet.suspendpaint();
  4. // ...
  5. sheet.resumepaint();
  6. }
复制代码

是不是因为这样会出现那问题,我觉得可能是代码写的不对引起的
回复 使用道具 举报
晓名
初级会员   /  发表于:2024-2-19 10:07:07
7#
Joestar.Xu 发表于 2024-2-19 09:29
您好,请参考上述回复看能否解决您的问题,如仍不能,请您上传一个可以复现您问题的Demo,我们这边根据您的 ...

我这个也只是线上时不时出现,我就想直接把停止/重新绘制放在for外边
回复 使用道具 举报
前端小白
注册会员   /  发表于:2024-2-19 10:11:02
8#
晓名 发表于 2024-2-19 10:07
我这个也只是线上时不时出现,我就想直接把停止/重新绘制放在for外边

放外面肯定是推荐的。至于时不时出现这种问题,应该不是挂起画法的逻辑导致的,就我所知,SpreadJS的画法都是同步的,其执行逻辑是稳定的。如果还是时不时出现,那确实需要排查业务代码了。

评分

参与人数 1金币 +200 收起 理由
Joestar.Xu + 200 赞一个!

查看全部评分

回复 使用道具 举报
晓名
初级会员   /  发表于:2024-2-19 10:18:59
9#
前端小白 发表于 2024-2-19 10:11
放外面肯定是推荐的。至于时不时出现这种问题,应该不是挂起画法的逻辑导致的,就我所知,SpreadJS的画法 ...

好的
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-19 16:43:02
10#
请问楼主的问题解决了吗?
SpreadJS 17.0.8 | GcExcel 7.1.0 已发布~
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部