找回密码
 立即注册

QQ登录

只需一步,快速开始

爱迪生

超级版主

55

主题

65

帖子

1390

积分

超级版主

Rank: 8Rank: 8

积分
1390
爱迪生
超级版主   /  发表于:2022-12-1 15:14  /   查看:1880  /  回复:0
在使用自定义函数的时候,有时候需要获取当前的spread对象,但是又不想把spread对象作为参数传入,想在重写evaluate方法的参数中获取spread对象,该如何实现呢?
1.isContextSensitive返回true,,函数的计算依赖于上下文
  1. FactorialArrayFunction.prototype.isContextSensitive = function () {
  2.             return true;
  3.            
  4.         };
复制代码
2.在重写evaluate的参数中获取spread对象
  1. FactorialArrayFunction.prototype.evaluate = function (arg) {
  2.             console.log(arg.source.getSheet().getParent())
  3.             var t = 1;
  4.             var result = [[]];
  5.             if (arguments.length === 1 && !isNaN(parseInt(arg))) {
  6.                 for (var i = 1; i <= arg; i++) {
  7.                     t = i * t;
  8.                     result[0].push(t);
  9.                 }
  10.                 return new GC.Spread.CalcEngine.CalcArray(result);
  11.             }
  12.             return "#VALUE!";
  13.         };
复制代码
通过arg.source.getSheet().getParent()就可以获取到自定义函数当前所在的工作簿
完整demo见附件

features_calculation_custom-functions_JavaScript (1).zip

7.85 KB, 下载次数: 142

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部