本帖最后由 Winny 于 2021-10-26 09:42 编辑
Excel为满足用户对公式的定制化需求,推出了宏。宏由VBA语言编写,相当于函数的概念。在财务、金融行业,宏的应用范围也是十分广泛。但如果要将本地的文件迁移到web端时,宏就无法继续使用了,因为浏览器是无法识别VB语言的。而SpreadJS作为国内领先的类Excel表格控件,自然也需要考虑到用户需要使用宏的需求。由于宏的本质其实也是一段可以重复执行的脚本,SpreadJS中采用使用自定义函数的方式来替换宏。最开始接触自定义函数的用户可能比较茫然,特别是需要将自定义函数做的如同内置函数一样可以智能提示,更是不知所措。本文会详细介绍自定义函数的定义以及如何给自定义函数添加如同内置函数一样的函数参数提示。
step1: 定义一个空函数
step2: 将空函数原型指向内置的函数基类,并添加对应参数
- myfunc.prototype = new GC.Spread.CalcEngine.Functions.Function(
- "myfunc", //函数名称,在单元格输入“=”时显示
- 1, //函数最少需要传递的参数个数
- 2, //函数最多能传递的参数个数
- {
- description: "这是一个自定义的函数", //单元格输入函数时对应的提示信息
- //parameters是对函数每个参数的描述,对应的是一个Object的数组
- parameters:[
- {
- name: 'num', //参数的名字,输入函数中的参数时会显示
- repeatable: false, //参数是否可以重复,一般只有最后一个参数可重复
- optional: false //参数是否可选
- }
- ]
- }
- );
复制代码
step3: 添加函数的计算逻辑
- myfunc.prototype.evaluate = function () {
- //arguments是函数传递进来的参数,数组类型
- return 100*(parseInt(arguments[0]));
- }
复制代码 step4: 将自定义函数添加到目标作用域中
自定义函数的作用域比较多,可以将当前自定义函数定义在全局GC中,这样你项目中所有的spread都可以使用该函数,代码为:
- GC.Spread.CalcEngine.Functions.defineGlobalCustomFunction(
- "myFunc",
- new myfunc()
- );
复制代码 也可以将自定义函数作用在当前spread当中,这样只有当前特定的spread才可以使用该函数,代码为:- spread.addCustomFunction(new myfunc())
复制代码 如果你指想在某一个sheet中使用该函数,可以将该自定义函数只添加到特定sheet当中,代码为:
- sheet.addCustomFunction(new myfunc())
复制代码
这里只介绍一种自定义函数的实现形式,文章附件会有另外一种形式,参见附件demo中FactorialFunction的实现方式。
除了自定义函数之外,SpreadJS还有异步函数,它的实现基本上和自定义函数一致,只不过多了一个等待结果时默认显示内容的方法,在附件demo中参考myAsync的实现方法。
|
|