找回密码
 立即注册

QQ登录

只需一步,快速开始

清水

金牌服务用户

11

主题

42

帖子

147

积分

金牌服务用户

积分
147

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

清水
金牌服务用户   /  发表于:2022-8-11 17:10  /   查看:5516  /  回复:20
1金币
image.png615788879.png image.png410404967.png 我想用指定的名字作为一个公式,例如公式="当前_月",
就去获取当前系统的年。我现在这样写,然后不行。
因为我后面还有需求就是公式名称是不固定的(根据条件自动组成),然后异步去后台解析公式再返回对应的数据

想请问该如何实现,还有上面这个简单自定义公式为什么不行

20 个回复

正序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-16 18:19:11
21#
可以监听EditEnded事件,在事件内部通过editingText属性获取编辑框的公式信息,进而做出判断。
API链接如下:
https://demo.grapecity.com.cn/sp ... tml#event:EditEnded
回复 使用道具 举报
清水
金牌服务用户   /  发表于:2022-8-16 11:40:13
20#
Clark.Pan 发表于 2022-8-16 11:28
那要完全实现这种,你得将所有能够考虑的组合做到自定义名称中才行,再不然就完全脱离SpreadJS的公式机制, ...

请问下有没有监听单元格公式改变的事件。
单元格公式发生改变时 获取到整串公式,再将这些特定组合 "数据_"、"财务_"等开头的字符串处理替换成具体的数值,后再执行计算
回复 使用道具 举报
清水
金牌服务用户   /  发表于: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 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
而且这还只是一种,我们还有其他的开头,例如"财务_"、"预算报表_"
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-8-16 09:22:15
16#
这里面哪些是动态的呢,从提供的公式来看都是静态条件,用上面我提供的方法添加customName自定义名称就可以了。
如果你说的数据_机01表_102_02__04201912这种是动态的,那不好意思根本没法做到,因为没法判断你输入的是一个文本还是一个公式,除非你用公式名称包一层,当做参数去调用。
回复 使用道具 举报
清水
金牌服务用户   /  发表于: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
回复 使用道具 举报
Brander.Zhai
超级版主   /  发表于:2022-8-16 08:56:56
14#
回复 使用道具 举报
清水
金牌服务用户   /  发表于:2022-8-16 08:36:22
13#
Clark.Pan 发表于 2022-8-15 18:26
用customName能够满足您的需求

这个没有办法满足我们的需求,我们一开始就是通过自定义名称去实现的,这个可以用于固定的公式"字符串",但没办法用于用户根据条件动态组成的公式或者是直接输入我们业务的公式去计算,因为输入的公式没法确定,也不能实时的获取到对应的数据
回复 使用道具 举报
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-15 15:26:00
11#
清水 发表于 2022-8-15 15:18
例如这张图片,自定义的公式是可以参与计算的。"当前_月"是固定的,而"数据_机01表_103_02__04201912"是 ...

如果有每个单元格 执行公式计算前的事件,貌似就能实现,就是单元格执行公式计算数据前 我获取到整串公式值,再将我这边所有特定的"字符串公式" 将之转换成具体的数字(因为我这边根据条件自动组成的公式也还是有固定的开头),然后继续执行spreadjs的公式计算
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部