5.20241.9

スプレッドシート:カスタム関数

FlexSheetで提供されている関数はほとんどの使用シナリオに対応できるはずですが、それでも場合によっては、追加の関数が必要になることがあります。

FlexSheetでは、独自のカスタム関数を追加するための2つのメソッド、addFunctionunknownFunctionが提供されています。

addFunctionメソッドは、カスタム関数を組み込み関数のリストに追加します。

通常は、addFunctionメソッドがカスタム関数をFlexSheet計算エンジンに追加するための最適な方法です。しかし、関数名が可変であったり、事前にわからない場合があります。たとえば、名前付き範囲や値の辞書の場合です。

このような場合は、unknownFunctionイベントを使用して、関数の値を動的に検索することができます。FlexSheetは、不明な関数名を検出すると、unknownFunctionイベントを発生させ、関数名とパラメータを含むパラメータを提供します。次に、イベントハンドラで結果を計算し、値を返します。

import * as wjFlexSheet from '@mescius/wijmo.grid.sheet';

let customFuncSheet = new wjFlexSheet.FlexSheet('#customFuncSheet');

customFuncSheet.addFunction('customSumProduct', function () {
    var result = 0,
        range1 = arguments[0],
        range2 = arguments[1];

    if (range1.length > 0 && range1.length === range2.length && range1[0].length === range2[0].length) {
        for (var i = 0; i < range1.length; i++) {
            for (var j = 0; j < range1[0].length; j++) {
                result += range1[i][j] * range2[i][j];
            }
        }
    }
    return result;
}, 'Custom SumProduct Function', 2, 2);

customFuncSheet.unknownFunction.addHandler(function (sender, e) {
    var result = '';
    if (e.params) {
        for (var i = 0; i < e.params.length; i++) {
            result += e.params[i];
        }
    }
    e.value = result;
});