[]
일반적으로 자주 사용하는 함수가 내장 함수에 포함되어 있지 않거나, 여러 내장 함수를 하나의 함수로 결합하고 싶은 경우, 사용자 정의 함수를 정의하여 사용할 수 있습니다. 이러한 함수는 내장 함수처럼 호출하여 사용할 수 있습니다.
이러한 사용자 정의 함수는 지정된 값 또는 배열을 반환할 수 있습니다. 이는 아래 섹션에서 설명합니다:
다음 코드 샘플은 값을 반환하는 사용자 정의 함수를 생성합니다.
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"),{sheetCount:3});
var activeSheet = spread.getActiveSheet();
// 사용자 정의 함수 추가
// 셀에 =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 () {
// Spread 초기화
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:
"이 함수는 1부터 입력 숫자까지의 팩토리얼을 계산하여 한 행의 여러 셀에 출력합니다",
};
};
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, "이 사용자 정의 팩토리얼 함수는 1부터 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);
});