在使用自定义函数的时候,有时候需要获取当前的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[0].push(t);
- }
- return new GC.Spread.CalcEngine.CalcArray(result);
- }
- return "#VALUE!";
- };
复制代码 通过arg.source.getSheet().getParent()就可以获取到自定义函数当前所在的工作簿
完整demo见附件
|
|