找回密码
 立即注册

QQ登录

只需一步,快速开始

Silhouette

注册会员

7

主题

9

帖子

58

积分

注册会员

积分
58
  • 140

    金币

  • 7

    主题

  • 9

    帖子

Silhouette
注册会员   /  发表于:2021-11-22 17:29  /   查看:1492  /  回复:2
本帖最后由 Derrick.Jiao 于 2021-11-23 10:48 编辑

1637573061(1).png561225280.png

问题描述:  目前Designer内置的函数不能够满足需求, 想在Designer中添加自定义函数(async Function前端调接口, 计算方法在服务端)该如何实现呢?

期望结果: 效果与目前内置函数类似 用户选择某custom function 输入指定参数 实现计算

2 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-10-17 12:07:20
推荐
您好,目前Designer支持“插入函数”按钮添加自定义公式。

代码如附件所示:添加菲波那切数列函数后,插入函数的弹窗中出现了自定义函数 image.png322426451.png
点击后 image.png219976195.png 最后结果如下: image.png537750243.png

插入公式中添加自定义公式.html

3.71 KB, 下载次数: 14

回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-11-22 18:21:26
沙发
本帖最后由 Derrick.Jiao 于 2021-11-23 10:48 编辑

这部分目前是封装好的,暂不支持添加。我们这边也调研一下,看下是否有其他的可行性方案。若没有其他更好的方案,我们会将这个问题做为需求给我们研发做进一步评估,评估通过后,我们会在后面的版本实现。
当然,自定义公式还是可以正常在设计器中使用的,例如下面的代码。
  1. var designer = new GC.Spread.Sheets.Designer.Designer(document.getElementById("designer_host"));
  2.                 var spread = designer.getWorkbook();
  3.                 var spread = designer.getWorkbook();
  4.                 function FactorialFunction() {
  5.                         this.name = "FACTORIAL";
  6.                         this.maxArgs = 1;
  7.                         this.minArgs = 1;
  8.                         this.description = function () {
  9.                                 return (
  10.                                         {
  11.                                                 description: "菲波那切数列",
  12.                                                 parameters: [
  13.                                                         {
  14.                                                                 name: 'number01',
  15.                                                                 repeatable: false,
  16.                                                                 optional: false
  17.                                                         }
  18.                                                 ]
  19.                                         }
  20.                                 )
  21.                         }
  22.                 }
  23.                 FactorialFunction.prototype = new GC.Spread.CalcEngine.Functions.Function();
  24.                 FactorialFunction.prototype.evaluate = function (arg) {
  25.                         var result = 1;
  26.                         if (arguments.length === 1 && !isNaN(parseInt(arg))) {
  27.                                 for (var i = 1; i <= arg; i++) {
  28.                                         result = i * result;
  29.                                 }
  30.                                 return result;
  31.                         }
  32.                         return "#VALUE!";
  33.                 };

  34.                 var factorial = new FactorialFunction();
  35.                 let sheet = spread.getActiveSheet()
  36.                 spread.addCustomFunction(factorial)
  37.                 sheet.setFormula(4, 2, "=factorial(5)");
复制代码


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部