組み込み関数ではない関数を定期的に使用する場合や、いくつかの組み込み関数を1つの関数として統合したい場合は、独自のカスタム関数を定義できます。カスタム関数は、組み込み関数とまったく同様に呼び出すことができます。カスタム関数は、指定された値または配列のいずれかを返すことができます。
次のサンプルコードは、単一の値を返すカスタム関数を作成する方法を示します。
JavaScript |
コードのコピー
|
---|---|
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()); |
次のサンプルコードは、配列を返すカスタム関数を作成する方法を示します。
JavaScript |
コードのコピー
|
---|---|
<script> $(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", }; }; 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); }); </script> |