找回密码
 立即注册

QQ登录

只需一步,快速开始

Universail
金牌服务用户   /  发表于:2024-6-19 19:37  /   查看:963  /  回复:11



假设设计了几个自定义公式,姑且叫做:MyFunc1、MyFunc2、MyFunc3


在特定的条件下,为了避免全量运算,如何只让MyFunc1公式进行重新计算?


11 个回复

倒序浏览
eat_grape_5
高级会员   /  发表于:2024-6-20 10:13:36
沙发
如果楼主的使用场景比较简单,比如在sheet中只定义了3个公式,而只需要在其中某个公式引用的单元格数据发生变化时重新计算该公式的话,有这样一个思路:

1. 设置计算模式为手动,这样当数据发生变化时所有公式都不执行计算;
2. 对sheet注册一个ValueChanged事件,判断触发事件的单元格是否为目标公式引用的单元格,如果是则重新计算该公式,否则不执行。
如果公式引用的非单个单元格,那便在事件的处理函数中扩大单元格范围判断即可。
附件为思路的实现demo,供参考。

CustomFunctionCalc.zip

1.46 KB, 下载次数: 147

回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-6-20 11:26:07
板凳
您好,可以参考楼上给出的建议。
首先将计算模式设置为手动模式https://demo.grapecity.com.cn/sp ... as/calculation-mode
其次,监听单元格值变化,如果是目标区域,则使用spread.calculate();  进行公式计算。
回复 使用道具 举报
Universail
金牌服务用户   /  发表于:2024-6-20 13:30:27
地板
eat_grape_5 发表于 2024-6-20 10:13
如果楼主的使用场景比较简单,比如在sheet中只定义了3个公式,而只需要在其中某个公式引用的单元格数据发生 ...

万万没想到,还真有办法,感谢感谢
回复 使用道具 举报
Universail
金牌服务用户   /  发表于:2024-6-20 13:30:35
5#
Ellia.Duan 发表于 2024-6-20 11:26
您好,可以参考楼上给出的建议。
首先将计算模式设置为手动模式https://demo.grapecity.com.cn/spreadjs/h ...

我试试看哈
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-6-20 16:40:24
6#
好的,有问题随时沟通哈。
回复 使用道具 举报
Universail
金牌服务用户   /  发表于:2024-7-4 12:37:47
7#
Joestar.Xu 发表于 2024-6-20 16:40
好的,有问题随时沟通哈。

场景还是有点不对,是其他地方去触发指定的公式运算,比如外部参数发生变化,要触发指定的公式重新运行,而不是公式编辑后
回复 使用道具 举报
Universail
金牌服务用户   /  发表于:2024-7-4 12:38:42
8#
Ellia.Duan 发表于 2024-6-20 11:26
您好,可以参考楼上给出的建议。
首先将计算模式设置为手动模式https://demo.grapecity.com.cn/spreadjs/h ...

spread.calculate();会导致全量运算公式
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-7-4 14:20:00
9#
本帖最后由 Joestar.Xu 于 2024-7-4 15:05 编辑

了解了,SpreadJS也可以根据选取的范围手动进行计算,不知道能不能满足您的需求:


function calculateSelection(spread) {
    let sheet = spread.getActiveSheet();
    let range = `'${sheet.name().replaceAll("'", "''")}'!`+GC.Spread.Sheets.CalcEngine.rangeToFormula(sheet.getSelections()[0]);
    spread.calculate(GC.Spread.Sheets.CalculationType.all, range);
}

参考:https://gcdn.grapecity.com.cn/fo ... d=203099&pid=763236
回复 使用道具 举报
Universail
金牌服务用户   /  发表于:2024-7-4 14:46:22
10#
Joestar.Xu 发表于 2024-7-4 14:20
了解了,SpreadJS也可以根据选取的范围手动进行计算,不知道能不能满足您的需求:

function calculateSe ...

这个前提还是需要知道哪些区域有目标公式
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部