找回密码
 立即注册

QQ登录

只需一步,快速开始

[已处理] 定义自定义公式

清水
金牌服务用户   /  发表于:2022-8-15 15:18:17
10#
沉沉 发表于 2022-8-15 14:41
换个思路,设置自定义公式=getData('年',1)第一个参数可以是年、月、日 ,第二个参数可传可不传。这样子在 ...

1660547443019.jpg603432006.png 例如这张图片,自定义的公式是可以参与计算的。"当前_月"是固定的,而"数据_机01表_103_02__04201912"是由用户自己选择条件生成的不固定的公式,"数据_"开头代表一种类型的。我们老系统是cs端软件,用的报表插件是可以实现这个功能的。是在数据计算前将业务特定的字符串转为对应的具体的值 再去参与插件本身的计算,这样这一整串公式每次重新渲染数据就都是取得最新的后端数据
1660547443019.jpg457657164.png
回复 使用道具 举报
清水
金牌服务用户   /  发表于:2022-8-15 15:26:00
11#
清水 发表于 2022-8-15 15:18
例如这张图片,自定义的公式是可以参与计算的。"当前_月"是固定的,而"数据_机01表_103_02__04201912"是 ...

如果有每个单元格 执行公式计算前的事件,貌似就能实现,就是单元格执行公式计算数据前 我获取到整串公式值,再将我这边所有特定的"字符串公式" 将之转换成具体的数字(因为我这边根据条件自动组成的公式也还是有固定的开头),然后继续执行spreadjs的公式计算
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-15 18:26:11
12#
用customName能够满足您的需求
  1. spread.addCustomName('当前年','=YEAR(NOW())', 0, 0);
复制代码

image.png735581054.png
image.png337442015.png
回复 使用道具 举报
清水
金牌服务用户   /  发表于:2022-8-16 08:36:22
13#
Clark.Pan 发表于 2022-8-15 18:26
用customName能够满足您的需求

这个没有办法满足我们的需求,我们一开始就是通过自定义名称去实现的,这个可以用于固定的公式"字符串",但没办法用于用户根据条件动态组成的公式或者是直接输入我们业务的公式去计算,因为输入的公式没法确定,也不能实时的获取到对应的数据
回复 使用道具 举报
Brander.Zhai
超级版主   /  发表于:2022-8-16 08:56:56
14#
回复 使用道具 举报
清水
金牌服务用户   /  发表于:2022-8-16 09:15:59
15#
本帖最后由 清水 于 2022-8-16 09:18 编辑
Brander.Zhai 发表于 2022-8-16 08:56
LAMBDA函数集了解一下
https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/calculation/l ...

我需要实现的效果是这种,IF(当前_月=12,数据_机01表_102_02__04201912,数据_机01表_102_02__04202012)。"当前_月"固定的可以通过自定义名称实现。
"数据_机01表_102_02__04201912"根据条件选择动态组成的不固定公式,也可以直接输入,输入公式后并且能够和spreadjs所有的自带公式进行计算。
所以只能是在spread公式每次计算前 将我们的公式"当前_月"“数据_机01表_102_02__04201912”“数据_机01表_102_02__04202012”转为具体的数值才能实现我们的功能
bandicam 2022-08-16 09-11-11-129.gif992054138.png
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-16 09:22:15
16#
这里面哪些是动态的呢,从提供的公式来看都是静态条件,用上面我提供的方法添加customName自定义名称就可以了。
如果你说的数据_机01表_102_02__04201912这种是动态的,那不好意思根本没法做到,因为没法判断你输入的是一个文本还是一个公式,除非你用公式名称包一层,当做参数去调用。
回复 使用道具 举报
清水
金牌服务用户   /  发表于:2022-8-16 09:27:58
17#
本帖最后由 清水 于 2022-8-16 09:29 编辑
Clark.Pan 发表于 2022-8-16 09:22
这里面哪些是动态的呢,从提供的公式来看都是静态条件,用上面我提供的方法添加customName自定义名称就可以 ...

"数据_机01表_102_02__04201912" "数据_机01表_102_02__04202012"
除了"数据_"开头后面一截都是可以随意选择条件组成的
X]84EXLXQ}UOLD{)PP9V076.png220006407.png
而且这还只是一种,我们还有其他的开头,例如"财务_"、"预算报表_"
回复 使用道具 举报
清水
金牌服务用户   /  发表于:2022-8-16 09:32:54
18#
Clark.Pan 发表于 2022-8-16 09:22
这里面哪些是动态的呢,从提供的公式来看都是静态条件,用上面我提供的方法添加customName自定义名称就可以 ...

我们是自己写的有选择、输入公式的弹框,也可以直接通过spreadjs公式栏输入公式"IF(当前_月=12,数据_机01表_102_02__04201912,数据_机01表_102_02__04202012)" 就能实时的计算数据
D@2V1PEQ1NHY}QZAI)N$S1O.png42357481.png
回复 使用道具 举报
清水
金牌服务用户   /  发表于:2022-8-16 11:40:13
20#
Clark.Pan 发表于 2022-8-16 11:28
那要完全实现这种,你得将所有能够考虑的组合做到自定义名称中才行,再不然就完全脱离SpreadJS的公式机制, ...

请问下有没有监听单元格公式改变的事件。
单元格公式发生改变时 获取到整串公式,再将这些特定组合 "数据_"、"财务_"等开头的字符串处理替换成具体的数值,后再执行计算
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部