找回密码
 立即注册

QQ登录

只需一步,快速开始

Universail
金牌服务用户   /  发表于:2024-2-21 14:47  /   查看:990  /  回复:11
image.png930541686.png
如上图,我希望能手动触发选中区域的公式计算,是否有相应的api可以支持这个需求?

另外,当打开设计器,加载数据的时候,不要触发公式计算,由用户自己决定是否触发公式计算,是否可以实现?

11 个回复

倒序浏览
前端小白
注册会员   /  发表于:2024-2-21 15:10:24
沙发
阔以是阔以,
1. 挂起计算引擎
2. 设置计算模式为手动计算
3. 设置公式
4. 唤醒计算引擎
5. 手动计算需要区域
小试了波代码
  1. var spread = new GC.Spread.Sheets.Workbook("ss");
  2. var sheet = spread.getActiveSheet();
  3. spread.suspendCalcService();
  4. spread.options.calculationMode = GC.Spread.Sheets.CalculationMode.manual;
  5. sheet.setValue(0, 0, 1)
  6. sheet.setFormula(1, 0, 'A1*2');
  7. sheet.setFormula(2, 0, 'A2*2');
  8. sheet.setFormula(3, 0, 'A3*2');
  9. sheet.setFormula(4, 0, 'POWER(3,3)');
  10. spread.resumeCalcService();
  11. spread.calculate(GC.Spread.Sheets.CalculationType.minimal, 'Sheet1!A5')
复制代码


核心API: https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Workbook#calculate

你可以自己玩玩

评分

参与人数 1金币 +500 收起 理由
Joestar.Xu + 500 赞一个!

查看全部评分

回复 使用道具 举报
Universail
金牌服务用户   /  发表于:2024-2-21 15:20:41
板凳
稍微有点出入,我修正一下自己的说法:
image.png726033935.png

就是刚打开设计器的时候,挂起公式计算引擎,上图公式1和公式2两个区域的公式都不会计算了。

然后手工选择公式2区域,右键点击(增加一个右键菜单)“执行公式计算”按钮,这时候,只让选中区域的公式重新计算。
回复 使用道具 举报
前端小白
注册会员   /  发表于:2024-2-21 16:05:58
地板
我觉得没啥问题啊。咱来脑滚一下逻辑。
1. 挂起计算引擎 = 就是刚打开设计器的时候,挂起公式计算引擎
2. 设置计算模式为手动计算
2. 设置公式 = 上图公式1和公式2两个区域的公式都不会计算了。
3. 唤醒公式引擎
到目前为止,公式1和公式2都没有计算,且当前运算模式为手动运算。
然后,你使用calcuate函数,手动计算公式2的那片区域,公式1是不会动的,只有公式2会运算。

这个和我的示例代码没啥出入哇,在我的示例代码中,你可以认为A1:A4是公式一,A5是公式五,逻辑跑完以后,只有A5 = 27算了,A2:A4的公式都没算,是空白。
回复 使用道具 举报
不吐葡萄皮
注册会员   /  发表于:2024-2-21 16:33:47
5#
调用下面的方法就能选中区域计算
  1. function calculateSelection(spread) {
  2.     let sheet = spread.getActiveSheet();
  3.     let range = `'${sheet.name().replaceAll("'", "''")}'!`+GC.Spread.Sheets.CalcEngine.rangeToFormula(sheet.getSelections()[0]);
  4.     spread.calculate(GC.Spread.Sheets.CalculationType.all, range);
  5. }
复制代码


但如果是自动计算模式,区域外的需要重算的话应该也会进行计算。
所以可以设置为手动计算,那样区域外就不计算了  spread.options.calculationMode = GC.Spread.Sheets.CalculationMode.manual;  

评分

参与人数 1金币 +500 收起 理由
Joestar.Xu + 500 赞一个!

查看全部评分

回复 使用道具 举报
前端小白
注册会员   /  发表于:2024-2-21 16:43:07
6#
不吐葡萄皮 发表于 2024-2-21 16:33
调用下面的方法就能选中区域计算

哎呦,阔以
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-21 16:46:48
7#
楼主可以参考楼上两位热心用户提出的解决方案看能否满足需求。
SpreadJS 17.0.9 | GcExcel 7.1.2 已发布~
回复 使用道具 举报
Universail
金牌服务用户   /  发表于:2024-2-21 16:55:59
8#
不吐葡萄皮 发表于 2024-2-21 16:33
调用下面的方法就能选中区域计算

非常感谢两位啊!我好像get到了!
总结一下下关键点:
1.打开设计器时挂机计算引擎,避免直接触发全量计算
2.设置计算模式为手工计算,避免后续执行计算时触发全量计算
3.获取range,即将选中区域转换为range
5.调用calculate方法,第二个参数range很关键,可以只计算指定范围的公式
回复 使用道具 举报
Universail
金牌服务用户   /  发表于:2024-2-21 16:56:42
9#
前端小白 发表于 2024-2-21 16:05
我觉得没啥问题啊。咱来脑滚一下逻辑。
1. 挂起计算引擎 = 就是刚打开设计器的时候,挂起公式计算引擎
2. ...

感谢感谢!重新仔细看了一遍,明白你的用意了,我本地尝试一下!
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-2-21 17:19:32
10#
后续如果还有其他的问题欢迎追问哈。
SpreadJS 17.0.9 | GcExcel 7.1.2 已发布~
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部