爱迪生 发表于 2022-12-1 15:14:09

自定义函数中获取Spread对象

在使用自定义函数的时候,有时候需要获取当前的spread对象,但是又不想把spread对象作为参数传入,想在重写evaluate方法的参数中获取spread对象,该如何实现呢?
1.isContextSensitive返回true,,函数的计算依赖于上下文
FactorialArrayFunction.prototype.isContextSensitive = function () {
            return true;
         
      };2.在重写evaluate的参数中获取spread对象
FactorialArrayFunction.prototype.evaluate = function (arg) {
            console.log(arg.source.getSheet().getParent())
            var t = 1;
            var result = [[]];
            if (arguments.length === 1 && !isNaN(parseInt(arg))) {
                for (var i = 1; i <= arg; i++) {
                  t = i * t;
                  result.push(t);
                }
                return new GC.Spread.CalcEngine.CalcArray(result);
            }
            return "#VALUE!";
      };通过arg.source.getSheet().getParent()就可以获取到自定义函数当前所在的工作簿
完整demo见附件
页: [1]
查看完整版本: 自定义函数中获取Spread对象