[]
        
(Showing Draft Content)

カスタム数式の作成

組み込み関数ではない関数を定期的に使用する場合や、いくつかの組み込み関数を1つの関数として統合したい場合は、独自のカスタム関数を定義できます。カスタム関数は、組み込み関数とまったく同様に呼び出すことができます。カスタム関数は、指定された値または配列のいずれかを返すことができます。

これらのカスタム関数は、以下のセクションで説明するように、指定された値または配列を返すことができます。

カスタム関数で単一の値を返す

次のサンプルコードは、単一の値を返すカスタム関数を作成する方法を示します。

var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"),{sheetCount:3});
var activeSheet = spread.getActiveSheet();
// カスタム関数をセルに追加して、結果を確認します。
// Type =myfunc(1)
function myfunc() {}
myfunc.prototype = new GC.Spread.CalcEngine.Functions.Function("myfunc", 0, 0, {name: "myfunc",description: "This is my first function"});
myfunc.prototype.evaluate = function (args) {
    return 100;}
spread.addCustomFunction(new myfunc());

カスタム関数で配列を返す

次のサンプルコードは、配列を返すカスタム関数を作成する方法を示します。

$(document).ready(function () {
    // スプレッドシートを初期化します。
    var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 1 });
    // アクティブシートを取得します。
    var sheet = spread.getSheet(0);
    // 動的な配列を許可します。
    spread.options.allowDynamicArray = true;
    // 階乗関数を作成します。
    function FactorialFunction() {
        this.name = "FACTORIAL";
        this.maxArgs = 1;
        this.minArgs = 1;
    }
    FactorialFunction.prototype = new GC.Spread.CalcEngine.Functions.Function();
    // 数式の結果を評価します。
    FactorialFunction.prototype.evaluate = function (arg) {
        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);
            }
            // 関数の結果としてCALCArrayオブジェクトを返します。
            return new GC.Spread.CalcEngine.CalcArray([result]);
        }
        return "#VALUE!";
    };
    // カスタム関数に説明を追加します。
    FactorialFunction.prototype.description = function () {
        return {
            name: "FACTORIAL",
            description:
                "This is function which calculates the factorial from 1 and show in different cells of a row",
            parameters: [
                { name: "number" }
            ]
        };
    };
    var factorial = new FactorialFunction();
    sheet.addCustomFunction(factorial);
    // セル(0,0)を原点とする3つの列をマージします。
    sheet.addSpan(0, 0, 1, 7, GC.Spread.Sheets.SheetArea.viewport);
    sheet.setValue(0, 0, "This custom factorial function calculates the factorial from 1 to 7 ");
    for (var i = 1; i < 8; i++) {
        sheet.setText(2, i - 1, i + "!");
    }
    // カスタム数式を設定します。
    sheet.setFormula(3, 0, "=Factorial(7)");
    var style = new GC.Spread.Sheets.Style();
    style.font = "bold 12px Arial";
    style.foreColor = "white";
    style.backColor = "#5B9BD5";
    style.hAlign = GC.Spread.Sheets.HorizontalAlign.center;
    style.vAlign = GC.Spread.Sheets.VerticalAlign.center;
    sheet.setStyle(0, 0, style, GC.Spread.Sheets.SheetArea.viewport);
});