找回密码
 立即注册

QQ登录

只需一步,快速开始

AirCat
金牌服务用户   /  发表于:2023-11-27 11:18  /   查看:1625  /  回复:11
本帖最后由 Lynn.Dou 于 2023-11-29 18:06 编辑


产品:SpreadJS
版本:V16.2.4
如图: image.png848968200.png
表格中E列引用了表格的Column1、Column2、Column3列的数据做计算,当我使用GC.Spread.Sheets.CalcEngine.evaluateFormula方法执行E2单元格公式时,
获取结果并不是预期的数值:
image.png880842285.png
请问如何获取这种公式执行的正确结果


11 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-11-27 12:02:17
沙发
您好,我根据您的描述测试没有复现问题,
如下图所示:
image.png788634032.png
请问该如何复现您的问题呢?
回复 使用道具 举报
AirCat
金牌服务用户   /  发表于:2023-11-27 12:30:37
板凳
Ellia.Duan 发表于 2023-11-27 12:02
您好,我根据您的描述测试没有复现问题,
如下图所示:

你好,需要执行计算的是F5单元格的公式,不是F5本身,像我例子中打印出来的[@Column1]+[@Column2]+[@Column3]1这种的
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-11-27 14:58:05
地板
本帖最后由 Ellia.Duan 于 2023-11-27 14:59 编辑

您好,您问题中的截图中E6单元格已经计算出了正确结果1+2+3= 6 。
想知道您为什么要执行GC.Spread.Sheets.CalcEngine.evaluateFormula 这个方法。
这个方法通常用来计算不在单元格中的公式,如计算一个公式表达式(拼接)。

所以想了解您执行evaluateFormula  这个API 的背景。
回复 使用道具 举报
AirCat
金牌服务用户   /  发表于:2023-11-27 15:53:45
5#
Ellia.Duan 发表于 2023-11-27 14:58
您好,您问题中的截图中E6单元格已经计算出了正确结果1+2+3= 6 。
想知道您为什么要执行GC.Spread.Sheets. ...

这个就比较复杂,我尽量解释明白;
我们写了一些自定义函数,自定义函数本身没有计算逻辑;
因为我们希望点击的时候才触发这些自定义函数的逻辑,所以我们又监听了CellClick方法,当发现点击的单元格的公式是自定义函数时,我们用GC.Spread.Sheets.CalcEngine.formulaToExpression方法去解析这个函数,拿到自定义函数的具体的参数,一层层再按照自己想要的逻辑用GC.Spread.Sheets.CalcEngine.expressionToFormula方法将参数还原为公式,再用GC.Spread.Sheets.CalcEngine.evaluateFormula方法将还原的公式计算出来得到参数值,然后再去做一些事情;
我们发现在表格中拿到的还原公式可能像我例子中出现的那样,再去计算时就出问题了;
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-11-27 17:45:00
6#
您好,已了解您的需求,您是否可以上传一个包含自定义函数的demo ,我们协助您看下evaluateFormula问题。
回复 使用道具 举报
WilliamChang
葡萄城公司职员   /  发表于:2023-11-27 17:56:57
7#
你好,想要用表格引用来evaluateFormula,后面两个参数baseRow, baseCol 就比较重要了,不传参数默认是baseRow, baseCol 是0,就相当于在A1 单元格计算该公式,所以结果就是#VALUE!。
我试了一下GC.Spread.Sheets.CalcEngine.evaluateFormula(sheet, "[@column1] + [@column2]", 1,4)就能返回结果了
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-11-28 09:06:26
8#
您好,可以参考楼上的回复,看是否可以解决您的问题。
回复 使用道具 举报
AirCat
金牌服务用户   /  发表于:2023-11-28 10:33:22
9#
WilliamChang 发表于 2023-11-27 17:56
你好,想要用表格引用来evaluateFormula,后面两个参数baseRow, baseCol 就比较重要了,不传参数默认是base ...

感谢这位大佬,可以解决问题;
另外再请教一下,如果我所有的计算都基于当前单元格的row和col位置来进行计算会有问题吗(即baseRow = activeRow,baseCol = activeCol)?
回复 使用道具 举报
WilliamChang
葡萄城公司职员   /  发表于:2023-11-28 11:34:22
10#
AirCat 发表于 2023-11-28 10:33
感谢这位大佬,可以解决问题;
另外再请教一下,如果我所有的计算都基于当前单元格的row和col位置来进行 ...

因为同一个公式在不同位置的计算结果有可能不同,所以需要把位置传一下。不会有问题,发现问题了可以提出来讨论。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部