找回密码
 立即注册

QQ登录

只需一步,快速开始

wuba_lzy

金牌服务用户

20

主题

78

帖子

288

积分

金牌服务用户

积分
288
wuba_lzy
金牌服务用户   /  发表于:2022-11-15 10:51  /   查看:3587  /  回复: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之前是否已经是挂起状态)

19 个回复

正序浏览
wuba_lzy
金牌服务用户   /  发表于:2022-11-27 18:22:50
19#
Lynn.Dou 发表于 2022-11-21 10:27
您demo整理好了吗?如果整理完毕了可以上传至贴中,这边来验证调研下。

发我下最新版本资源文件吧,我先升级下,看看问题是不是在最新版本已经决定
我看你发的demo是15.2.5,这个我看到最新是15.2.2
回复 使用道具 举报
wuba_lzy
金牌服务用户   /  发表于:2022-11-27 15:25:44
18#
wuba_lzy 发表于 2022-11-27 12:48
这两个demo结果不一样,都是一样的流程

spread.fromJSON( ssjson, { doNotRecalculateAfterLoad: true  ...

15.0.2  版本都可以计算出来

1demo(初始化不计算-挂起-计算)未计算(15.0.2版本是好的).html

83.69 KB, 下载次数: 184

回复 使用道具 举报
wuba_lzy
金牌服务用户   /  发表于:2022-11-27 12:48:22
17#
本帖最后由 wuba_lzy 于 2022-11-27 15:00 编辑

这两个demo结果不一样,都是一样的流程

spread.fromJSON( ssjson, { doNotRecalculateAfterLoad: true } );
            spread.suspendCalcService(false);   
            spread.resumeCalcService(true);

2demo(初始化不计算-挂起-计算)计算了.html

93.8 KB, 下载次数: 163

1demo(初始化不计算-挂起-计算)未计算.html

83.69 KB, 下载次数: 170

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-21 10:27:12
16#
您demo整理好了吗?如果整理完毕了可以上传至贴中,这边来验证调研下。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-18 14:57:55
15#
wuba_lzy 发表于 2022-11-18 14:07
我下周整理个demo吧,这两天比较忙

好的,期待您的demo
回复 使用道具 举报
wuba_lzy
金牌服务用户   /  发表于:2022-11-18 14:07:52
14#
Lynn.Dou 发表于 2022-11-18 11:03
根据描述使用setArray设置vlookup公式,测试公式是可以正常计算的,如附件demo所示。
您在demo基础上调 ...

我下周整理个demo吧,这两天比较忙
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-18 11:03:43
13#
wuba_lzy 发表于 2022-11-17 21:21
定位到原因了:
setArray中公式用到了VLOOKUP,
其他sheet里面用到此列都没有计算出来。

根据描述使用setArray设置vlookup公式,测试公式是可以正常计算的,如附件demo所示。
您在demo基础上调整下代码,需要可复现此问题,这边再验证下。

demo (2).html

3.68 KB, 下载次数: 193

回复 使用道具 举报
wuba_lzy
金牌服务用户   /  发表于:2022-11-17 21:21:45
12#
本帖最后由 Ellia.Duan 于 2022-11-18 09:55 编辑
Lynn.Dou 发表于 2022-11-17 14:57
您可以遍历sheet实际测试下,如前面所述,如果有疑问您可以结合具体的demo详细说明,这边再做进一步的验 ...

定位到原因了:
setArray中公式用到了VLOOKUP,
其他sheet里面用到此列都没有计算出来。

详细描述:
1,setArray 的公式
let xx = [ ['=IFERROR(VLOOKUP(E2,账套_主体类别映射!A:C,3,FALSE),"未配置")'],........ ]
sheet.setArray(1, 3, xx, true);

2,用到VLOOKUP的sheet: 入账汇总_源!$D:$D

3,未计算出结果的单元各公式:
=SUM(SUMIFS(入账汇总_源!$H:$H,入账汇总_源!$A:$A,B$4,入账汇总_源!$C:$C,$A50,入账汇总_源!$D:$D,"房产",入账汇总_源!$C:$C,{"SEM","公关类","广点通","浏览器","媒介","品牌","非房产","网址导航","信息流","应用商店","影视植入","预装","短视频","直播"}))



image.png746517944.png

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-11-17 14:57:22
11#
wuba_lzy 发表于 2022-11-17 14:09
recalcAll 是 sheet.recalcAll(),我这边非常多的sheet,只能循环执行吗?
而且sheet之间有公式有关联每 ...

您可以遍历sheet实际测试下,如前面所述,如果有疑问您可以结合具体的demo详细说明,这边再做进一步的验证。
回复 使用道具 举报
wuba_lzy
金牌服务用户   /  发表于:2022-11-17 14:09:38
10#
本帖最后由 wuba_lzy 于 2022-11-17 14:12 编辑
Lynn.Dou 发表于 2022-11-17 13:47
电话沟通中了解到,您在导出json前挂起公式是为了避免修改单元格使公式重算问题。

在重新导入json后, ...

recalcAll 是 sheet.recalcAll(),我这边非常多的sheet,只能循环执行吗?
而且sheet之间有公式有关联每个sheet 执行 sheet.recalcAll()会导致重复计算吧。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部