设置计算模式为手动后 异步公式计算问题
本帖最后由 Richard.Huang 于 2023-10-20 13:41 编辑产品:SpreadJS
版本:V16.2
问题编号:SJS-20119
初始化设置了两个异步公式,点击按钮 调用calculate()方法 恢复计算要点击两次才能计算出结果,见demo;
期望实现需求,插行删行 不触发异步公式计算 点击按钮才让它进行计算
您好,这边没有复现您的问题:
加载页面后,点击按钮可以进行公式计算,无需点击两次,其次,插行之后也没有进行公式计算,点击按钮之后才进行的计算。
异步函数用在不能立刻获取计算结果的时候使用, 比如数据或者计算方法在服务器端的时候。
比如您这里想在点击按钮之后,计算公式,可以试下evaluateFormula这个api ,点击按钮后进行公式计算
var result = GC.Spread.Sheets.CalcEngine.evaluateFormula(sheet, "SUM(A1:A2)", 0, 0);
Ellia.Duan 发表于 2023-9-12 09:43
您好,这边没有复现您的问题:
加载页面后,点击按钮可以进行公式计算,无需点击两次,其次,插行之后也没 ...
您好 我这边出现这现象是在这两个异步函数上方插行后 点击的计算,需要点击两下,烦请您再试一下看看能否复现 本帖最后由 Ellia.Duan 于 2023-9-12 11:59 编辑
大盆 发表于 2023-9-12 10:16
您好 我这边出现这现象是在这两个异步函数上方插行后 点击的计算,需要点击两下,烦请您再试一下看看能否 ...
您好,您的问题已复现,这边调研下为什么需要点击两次才会出现结果的问题。此贴将置为保留处理。
问题编号:SJS-20119
Ellia.Duan 发表于 2023-9-12 10:57
您好,您的问题已复现,这边调研下为什么需要点击两次才会出现结果的问题。此贴将置为保留处理。
您好,这边确认下,您想要解决的问题是:
公式上面插入行,点击两次按钮,即执行两次spread.calculate()公式才开始计算
希望点击一次按钮,公式参与计算? 本帖最后由 大盆 于 2023-9-12 14:24 编辑
Ellia.Duan 发表于 2023-9-12 11:48
您好,这边确认下,您想要解决的问题是:
公式上面插入行,点击两次按钮,即执行两次spread.calculate() ...
期望是开启了手动计算模式后,只有点击按钮触发calculate() 才计算spread表中所有公式(普通公式,异步公式),
另外想确认一下,异步公式设置了interval,如果应用了手动计算模式,它还会按某一个时间间隔进行计算吗
本帖最后由 Ellia.Duan 于 2023-9-12 15:20 编辑
大盆 发表于 2023-9-12 14:21
期望是开启了手动计算模式后,只有点击按钮触发calculate() 才计算spread表中所有公式(普通公式,异步公 ...
您好,可能您这边理解的手动计算模式有误,比如设置公式'=sum(A1,2,5)' ,页面加载,公式还是会计算,结果为7 。
当A1单元格发生变化输入1时,且设置为手动模式,这种情况下执行calculate()发现公式结果为8。
如果计算模式是自动,那么当A1单元格发生变化时,公式也立即变化。
所以 针对您的需求,您看下这种情况是否满足:
初始化Spread后,暂停公式计算。当点击按钮后,开始公式计算
针对您的第二个问题,不太明白手动模式下为什么要开启定时计算。
Ellia.Duan 发表于 2023-9-12 15:11
您好,可能您这边理解的手动计算模式有误,比如设置公式'=sum(A1,2,5)' ,页面加载,公式还是会计算,结果 ...
第二个问题是因为 有几个自定义公式 是需要根据当前sheet表里面其它格子的值进行计算的,可能是增行后里面格子的值,计算时间是期望用户 一输入完值,就让那两个公式进行计算,其它公式不进行计算 大盆 发表于 2023-9-13 11:10
第二个问题是因为 有几个自定义公式 是需要根据当前sheet表里面其它格子的值进行计算的,可能是增行后里 ...
根据您的描述,不设置定时计算,用您现在的代码也可能完成您的需求。
本帖最后由 大盆 于 2023-9-13 11:28 编辑
Ellia.Duan 发表于 2023-9-13 11:19
根据您的描述,不设置定时计算,用您现在的代码也可能完成您的需求。
定时计算可以在手动计算模式下开启吗,这样不知道是不是还有效,因为这块的自定义公式取值逻辑有点复杂,不是简单的像sum那样的加和,另之前可能没有表述清楚,想知道 在设置spread为手动计算模式时,再次fromjson一个表,请问这个表里面的公式在fromjson后能够进行一次计算吗