请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

sjxid

注册会员

9

主题

13

帖子

70

积分

注册会员

积分
70
sjxid
注册会员   /  发表于:2025-4-8 11:34  /   查看:123  /  回复:5
1金币
本帖最后由 sjxid 于 2025-4-8 13:59 编辑

spreadjs 支持office的模拟分析功能 image.png304329222.png 支持吗?或者有什么方式代替 还有单向变量求解

5 个回复

倒序浏览
Wilson.Zhang
超级版主   /  发表于:2025-4-8 16:49:04
沙发
您好!SpreadJS不支持模拟运算分析,不过可以参考Microsoft Excel中模拟运算分析功能的操作步骤自定义实现。

如下动图所示,用以模拟运算分析的单元格区域为A6:B10,其中单元格A7:A10为在模拟计算时用以代替公式“=SUM(B1,B2)”中B1或B2,B6为参与模拟运算的公式,A7:A10中数据经B6中公式计算后所得结果填充在B7:B10中。
单变量计算.gif

从上述流程中了解到模拟运算分析有三个关键因素:计算公式(B6)、待替换的旧引用(B1或B2)、新引用(A7:A10)。以B1为例,可以想象模拟分析运算逐次将B2公式中的B1替换为A7、A8、A9、A10执行计算,并将计算结果逐次填充在B7:B10中。

那么,在SpreadJS中,只要可以知道上述三项因素即可复刻该功能。再来看看SpreadJS的支持:

CalcEngine:formulaToExpression()可以将公式转换为表达式,非公式字符串,而是将公式解析为表达树形式的表达式,如下图所示,表达式Expression对象中的arguments即公式参数引用:
1744101095066.png495664367.png

可以看到arguments属性值数组中每项均由row、column属性,分别代表引用单元格行列。那么,可以改写row和col为新引用单元格,如下图所示,将公式“=SUM(B1,B2)”第一个参数B1引用修改为A7:
1744101356377.png137375487.png

经过CalcEngine:expressionToFormula()可得到修改应用单元格后的公式,就可以使用CalcEngine:evaluateFormula()计算公式,如下图所示:
1744101477129.png963594055.png

以上是一个简单的例子,实际场景可能会使用更复杂的公式,可以根据具体使用场景细化过程。而且,您可以从上面的图中看到arguments属性值数组中的各项参数有type属性,其值为数字,实际类型为枚举类ExpressionType,值为1时代表参数为引用,可以据此判断参数类型。

SpreadJS不支持模拟运算分析功能,上述是基于Microsoft Excel就模拟分析运算功能提供的操作步骤结合SpreadJS计算引擎支持的功能形成的实现方案。其中关于Expression实例的属性,除type外均未在API文档中公开,不确定在产品后续的迭代过程中是否会修改Expression对象的内部实现。如果您采取了上述方案,那么,建议您在使用过程中每次升级SpreadJS版本后都测试上述方案,确保Expression各属性调用正常,功能正常。

如上所述,您可以亲测评估下。
回复 使用道具 举报
sjxid
注册会员   /  发表于:2025-4-9 08:51:51
板凳
Wilson.Zhang 发表于 2025-4-8 16:49
您好!SpreadJS不支持模拟运算分析,不过可以参考Microsoft Excel中模拟运算分析功能的操作步骤自定义实现 ...

您好能把您的demo发下吗
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-4-9 15:54:29
地板
sjxid 发表于 2025-4-9 08:51
您好能把您的demo发下吗

将上述步骤封装为自定义函数,以此实现与Microsoft Excel中模拟运算相同功效的功能,执行效果如下动图所示:
模拟运算分析.gif

附件即对应demo,您可以参考其中的实现步骤,针对具体业务需求实现。

在这个demo中,用到了自定义函数,您可以参考官网教程了解自定义函数:
自定义函数

17.1.10模拟运算.html

7.4 KB, 下载次数: 12

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:4 天前
5#
请问上述demo是否满足您的需求呢?如仍有疑问,可再跟帖交流。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:昨天 14:51
6#
您好!请教下您的问题解决的怎么样了?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部