找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

130

主题

246

帖子

1530

积分

超级版主

Rank: 8Rank: 8

积分
1530
Winny
超级版主   /  发表于:2021-10-14 17:24  /   查看:2312  /  回复:4
本帖最后由 Winny 于 2021-10-26 09:42 编辑

    Excel为满足用户对公式的定制化需求,推出了宏。宏由VBA语言编写,相当于函数的概念。在财务、金融行业,宏的应用范围也是十分广泛。但如果要将本地的文件迁移到web端时,宏就无法继续使用了,因为浏览器是无法识别VB语言的。而SpreadJS作为国内领先的类Excel表格控件,自然也需要考虑到用户需要使用宏的需求。由于宏的本质其实也是一段可以重复执行的脚本,SpreadJS中采用使用自定义函数的方式来替换宏。最开始接触自定义函数的用户可能比较茫然,特别是需要将自定义函数做的如同内置函数一样可以智能提示,更是不知所措。本文会详细介绍自定义函数的定义以及如何给自定义函数添加如同内置函数一样的函数参数提示。

step1: 定义一个空函数
  1. function myfunc(){}
复制代码
step2: 将空函数原型指向内置的函数基类,并添加对应参数
  1. myfunc.prototype = new GC.Spread.CalcEngine.Functions.Function(
  2.     "myfunc",                    //函数名称,在单元格输入“=”时显示
  3.      1,                              //函数最少需要传递的参数个数
  4.      2,                             //函数最多能传递的参数个数
  5.      {
  6.         description: "这是一个自定义的函数",    //单元格输入函数时对应的提示信息
  7.         //parameters是对函数每个参数的描述,对应的是一个Object的数组
  8.         parameters:[
  9.             {
  10.                  name: 'num',         //参数的名字,输入函数中的参数时会显示
  11.                  repeatable: false,   //参数是否可以重复,一般只有最后一个参数可重复
  12.                  optional: false      //参数是否可选
  13.             }
  14.         ]
  15.     }
  16.         );
复制代码

step3: 添加函数的计算逻辑
  1.   myfunc.prototype.evaluate = function () {
  2.     //arguments是函数传递进来的参数,数组类型
  3.     return 100*(parseInt(arguments[0]));
  4.         }
复制代码
step4: 将自定义函数添加到目标作用域中
    自定义函数的作用域比较多,可以将当前自定义函数定义在全局GC中,这样你项目中所有的spread都可以使用该函数,代码为:
  1. GC.Spread.CalcEngine.Functions.defineGlobalCustomFunction(
  2.             "myFunc",
  3.             new myfunc()
  4.         );
复制代码
也可以将自定义函数作用在当前spread当中,这样只有当前特定的spread才可以使用该函数,代码为:
  1. spread.addCustomFunction(new myfunc())
复制代码
如果你指想在某一个sheet中使用该函数,可以将该自定义函数只添加到特定sheet当中,代码为:
  1. sheet.addCustomFunction(new myfunc())
复制代码

这里只介绍一种自定义函数的实现形式,文章附件会有另外一种形式,参见附件demo中FactorialFunction的实现方式。

除了自定义函数之外,SpreadJS还有异步函数,它的实现基本上和自定义函数一致,只不过多了一个等待结果时默认显示内容的方法,在附件demo中参考myAsync的实现方法。




WechatIMG236.jpeg

公式函数分类-1.html

5.16 KB, 下载次数: 44

4 个回复

倒序浏览
湖南大商帮
初级会员   /  发表于:2023-1-14 15:11:50
沙发
能不能出一篇全面详细的文档,来介绍自定义函数这个版块的所有内置方法属性等,api文档看不懂,demo涉及到的参数又不全
回复 使用道具 举报
Winny
超级版主   /  发表于:2023-1-16 09:21:34
板凳
湖南大商帮 发表于 2023-1-14 15:11
能不能出一篇全面详细的文档,来介绍自定义函数这个版块的所有内置方法属性等,api文档看不懂,demo涉及到 ...

示例中,相关参数均已做了计算,老版本的API文档都有相关的参数解释,你可以参考:
https://demo.grapecity.com.cn/sp ... tions.Function.html
回复 使用道具 举报
湖南大商帮
初级会员   /  发表于:2023-1-16 14:19:08
地板
好的,我去研究一下
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-1-16 16:19:11
5#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部