找回密码
 立即注册

QQ登录

只需一步,快速开始

wuba_lzy

金牌服务用户

20

主题

78

帖子

288

积分

金牌服务用户

积分
288
wuba_lzy
金牌服务用户   /  发表于:2022-11-15 10:51  /   查看:4090  /  回复:19
1金币
本帖最后由 Richard.Ma 于 2022-11-16 10:29 编辑

请教下~

我理解suspendCalcService(false)可以用来挂起公式,使excel所有公式停止计算。
此时可以改变单元各中数据,不影关联的其他单元各,可以防止改变数据时候公式计算,如公式复杂数据量大浏览器会很卡。


版本:15.2.2
suspendCalcService(false) 挂起公式后,保存的ssjson,再次fromJSON后,还是挂起状态。
如果此时再次挂起suspendCalcService(false) ,是否需要两次resumeCalcService(true)重新计算公式才可以正常显示。
(例如: =SUMIFS(辅助账科目余额表!I:I,辅助账科目余额表!A:A,科目余额表!$C$4,辅助账科目余额表!B:B,科目余额表!A7)    )

求证是否有这样的规律,还有如何判断当前状态是否已经是公式挂起状态。

(项目中有此场景,展示时需要挂起,处理数据,再计算,但是无法保证ssjson之前是否已经是挂起状态)

最佳答案

查看完整内容

附件为V15.2.5资源文件,您也可以通过npm升级测试下。 这边先验证下您提供的demo,有进展贴中沟通。 ------------------------------------------------ 这边使用V15.2.5测试,执行spread.suspendCalcService/resumeCalcService 可以重算公式,您可以升级测试下。

19 个回复

倒序浏览
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-15 10:51:16
来自 20#
本帖最后由 Lynn.Dou 于 2022-12-5 18:48 编辑

附件为V15.2.5资源文件,您也可以通过npm升级测试下。
这边先验证下您提供的demo,有进展贴中沟通。

------------------------------------------------

这边使用V15.2.5测试,执行spread.suspendCalcService/resumeCalcService 可以重算公式,您可以升级测试下。

V15.2.5.zip

5.06 MB, 下载次数: 443

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-15 14:11:37
2#
您好,
首先针对您下图的疑问,经过测试需要两次resumeCalcService(true)才能重新计算,您可以实际测试下。
image.png467899169.png
不过这边有些不理解,为什么要挂起计算之后再进行导出json呢?
如果您挂起计算之后,此时对公式引用的单元格做了修改,那么公式是不会随之计算的,也就是说实际上此时的公式计算结果是不正确的,这一点符合您实际的需要吗?
另外,如果是顾虑公式计算耗费性能,那么在您恢复计算的同时公式还是会重算的,所以没太理解您这样做的原因。
您可以结合实际业务情况详细描述下您的需求,以便这边理解此问题。
回复 使用道具 举报
wuba_lzy
金牌服务用户   /  发表于:2022-11-16 14:47:13
3#
Lynn.Dou 发表于 2022-11-15 14:11
您好,
首先针对您下图的疑问,经过测试需要两次resumeCalcService(true)才能重新计算,您可以实际测试下。 ...

之前用15.0.2版本一直是没有问题的,
挂起状态保持ssjson是因为这一步骤是做模板,不需要计算公式,可以保持挂起或者计算状态都可以。
后面展示为了节约计算时间会有挂起动作,这一步骤有可能和做模板时候的挂起重复
然后是数据处理
最后是恢复公式计算
回复 使用道具 举报
wuba_lzy
金牌服务用户   /  发表于:2022-11-16 14:51:43
4#
如何判断此时是否是公式挂起状态呢
回复 使用道具 举报
wuba_lzy
金牌服务用户   /  发表于:2022-11-16 16:34:46
5#
本帖最后由 wuba_lzy 于 2022-11-16 16:36 编辑

发现规律

15.0.2版本
某几个sheet的公式挂起 sheet.suspendCalcService(true)
可以通过spread调用恢复公式 spread.resumeCalcService(true)

15.2.2版本
sheet公式挂起 sheet.suspendCalcService(true)
必须循环执行 sheet.resumeCalcService(true)
或者
spread.resumeCalcService(true)
spread.resumeCalcService(true)
才行
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-16 17:53:19
6#
首先修正下前面的回复,这里所述的需要执行两次resumeCalcService(true)才能重新计算 针对的是同一个spread对象。

image.png287168578.png
而对于设置suspendCalcService之后导出的json文件,是不会记录暂停/恢复绘制的相关信息的,所以如果将此json文件导入一个新的spread中,
前面设置的suspendCalcService其实无作用,你会发现公式是可以正常计算的。请知悉。
所以,针对您描述的问题,您是在同一个spread中做的暂停/绘制计算吗?
您的联系方式是多少呢?这边与您电话沟通下。


回复 使用道具 举报
wuba_lzy
金牌服务用户   /  发表于:2022-11-16 18:21:44
7#
Lynn.Dou 发表于 2022-11-16 17:53
首先修正下前面的回复,这里所述的需要执行两次resumeCalcService(true)才能重新计算 针对的是同一个spread ...

感谢,发现了新的问题,
15311412882
回复 使用道具 举报
wuba_lzy
金牌服务用户   /  发表于:2022-11-16 18:29:23
8#
Lynn.Dou 发表于 2022-11-16 17:53
首先修正下前面的回复,这里所述的需要执行两次resumeCalcService(true)才能重新计算 针对的是同一个spread ...

我目前做的都是为了排查问题,因为升级版本导致很多报表公式无法计算,有整个sheet不计算的,也有部分单元各不计算的,如果手动改单元各内容,公式才会触发。

我的很多尝试是为了让公式能计算出数据,所以在在排查哪一环节出问题,现在发现即使都是恢复计算状态很多公式还是无法得出结果。
线上问题,您随时都可以联系我,比较急的,感谢
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-17 13:47:03
9#
wuba_lzy 发表于 2022-11-16 18:29
我目前做的都是为了排查问题,因为升级版本导致很多报表公式无法计算,有整个sheet不计算的,也有部分单 ...

电话沟通中了解到,您在导出json前挂起公式是为了避免修改单元格使公式重算问题。

在重新导入json后,您执行了doNotRecalculateAfterLoad为true,即公式不重算。
导入json后,您使用setArray修改了单元格数据,此时希望对公式重算,
针对此需求,可以测试下 recalcAll 方法,API如下:
https://demo.grapecity.com.cn/sp ... Worksheet#recalcall

如果上述方案仍未解决问题,请整理一个可复现的demo,这边再调研下原因。

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部