找回密码
 立即注册

QQ登录

只需一步,快速开始

LMJYH

注册会员

8

主题

20

帖子

106

积分

注册会员

积分
106
LMJYH
注册会员   /  发表于:2022-11-3 16:20  /   查看:1890  /  回复:9
1金币
本帖最后由 Clark.Pan 于 2022-11-3 18:27 编辑

spread v13.0.0 中:
比如A1列的公式,是A列从第2行到行末所有单元格的数值内容总和。
现在我暂停计算spread.suspendCalcService(false),addRows新增10行,并且将第2行copyTo(copyTo样式,值,公式)到新增的每一行,然后再给新增行赋上新值。等这一系列操作结束后,我再恢复计算spread.resumeCalcService(true); (设置为true,就想计算下sheet页所有公式)
这个时候,我发现A1列的值并没有因为新增的行有变化,请问是为什么?恢复计算后,怎么没有重新计算该sheet页的所有公式?是因为计算公式发生在我添加行之前了吗?


最佳答案

查看完整内容

参考附件demo 同样是挂起后addRows 然后做了copyTo 之后修改了公式引用相关单元格的值,然后点击resumeCalc resumeCalc方法中加入了repaint。测试后没有任何问题。

9 个回复

倒序浏览
最佳答案
最佳答案
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-3 16:20:17
来自 8#
参考附件demo
同样是挂起后addRows
然后做了copyTo
之后修改了公式引用相关单元格的值,然后点击resumeCalc
resumeCalc方法中加入了repaint。测试后没有任何问题。

Test_CDN_13.0.x_calc.html

2.46 KB, 下载次数: 80

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-3 18:28:47
2#
您好,该问题我这边已经重现,已经将问题反馈给了开发团队,具体原因需要开发进行调查。
该贴改为保留处理,有进一步的反馈我会在这里第一时间通知您。
回复 使用道具 举报
knight9
注册会员   /  发表于:2022-11-4 09:16:12
3#
同问
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-4 11:51:24
4#
已经反馈了, 有结果我这边第一时间通知您。
临时解决方案,想要计算可以考虑手动调用一下sheet.recalcAll() 手动重算一下。
回复 使用道具 举报
LMJYH
注册会员   /  发表于:2022-11-11 11:00:04
5#
Clark.Pan 发表于 2022-11-4 11:51
已经反馈了, 有结果我这边第一时间通知您。
临时解决方案,想要计算可以考虑手动调用一下sheet.recalcAll ...

你好,请问有进度了吗?
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-11 14:35:52
6#
结果如下:
经过我们的调查这里实际上是有进行重算的,只是页面上没有重新绘制。
在您之前的代码后加上一句
spread.repaint()就可以了。
回复 使用道具 举报
LMJYH
注册会员   /  发表于:2022-11-14 09:51:55
7#
Clark.Pan 发表于 2022-11-11 14:35
结果如下:
经过我们的调查这里实际上是有进行重算的,只是页面上没有重新绘制。
在您之前的代码后加上一 ...

感谢解答,不过已尝试该解决办法,没有效果。我们在开始处理spread之前,已经suspendPaint,suspendCalcService,suspendEvent。结束时也恢复相关绘制,计算,事件。另外补充下,新增copyTo的行内单元格,也有带公式的,不知这样对现在的问题是否有影响?
除了该解决方法,是否还有其他方法可解决?
回复 使用道具 举报
LMJYH
注册会员   /  发表于:2022-11-15 15:42:45
9#
Clark.Pan 发表于 2022-11-14 14:01
参考附件demo
同样是挂起后addRows
然后做了copyTo


你好,该问题我复现了,已发新帖,
https://gcdn.grapecity.com.cn/showtopic-157398-1-1.html

请帮忙看看,谢谢。

另外,我之前有看别的帖子说是suspendCalcService与resumeCalcService应该是成对出现的,这个是必须的吗?
您贴的代码,我看了下,截图如下,这种先spread.suspendCalcService(),再sheet.resumeCalcService(),算是成对出现的,或者说这么写,是可以的吗?
感谢回答


image.png66769103.png

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-15 15:58:48
10#
suspendCalcService意思是挂起计算引擎,让计算引擎暂时失效。resumeCalcService是恢复计算引擎。那么只挂起不恢复,那么公式计算引擎相当于一直是失效的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部