[]
        
(Showing Draft Content)

수식 내 동적 배열

동적 배열 수식은 사용자가 스프레드시트에서 데이터 캐시를 효과적으로 활용하려고 할 때 특히 유용합니다. 이는 이러한 수식이 낮은 메모리 사용으로 무작위 접근을 허용하기 때문에 가능합니다.

셀에 동적 배열 수식이 포함되면, 배열의 요소들이 인접한 빈 셀로 넘쳐흐르기 때문에 여러 값이 반환됩니다. 일반 배열과 달리, 동적 배열은 데이터가 소스 범위에서 삽입되거나 제거될 때 자동으로 크기가 조정됩니다.

스필드 배열 수식 (Spilled Array Formulas)

여러 개의 결과를 반환하고, 인접한 셀로 값이 넘쳐 흐르며, 여러 행과 열을 포함하는 셀 범위로 값을 확장하는 동적 배열 수식을 스필드 배열 수식(Spilled Array Formulas)이라고 합니다.

스필드 배열 수식은 표에서는 지원되지 않습니다. 그러나 동적 배열 수식이 여러 행과 열로 넘쳐 흐를 때, 스프레드시트에서 사용되는 셀 범위는 명시적으로 형식을 지정하여 표처럼 표시할 수 있습니다.

내장 동적 배열 수식

SpreadJS는 다음과 같은 내장 동적 배열 수식을 지원합니다. 이들에 대한 자세한 정보와 예시는 아래 주제를 참조하십시오.

  1. UNIQUE

  2. SORT

  3. SORTBY

  4. RANDARRAY

  5. SEQUENCE

  6. FILTER

사용자 정의 동적 배열 수식

내장 동적 배열 수식과 함께, SpreadJS는 사용자가 사용자 정의 함수를 생성하고 이를 동적 배열 수식에 사용할 수 있는 사용자 정의 동적 배열 수식도 지원합니다.

다음 코드 샘플은 "Selection"이라는 사용자 정의 함수가 선택된 셀 범위에 따라 셀 범위에 넘쳐 흐르는 사용자 정의 동적 배열 수식을 생성하는 예입니다.

    // Spread 초기화
    var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
    // DynamicArray 허용
    spread.options.allowDynamicArray = true;
    // 활성 시트 가져오기
    var sheet = spread.getActiveSheet();
    // 사용자 정의 함수 "SelectionFunction" 추가
    spread.addCustomFunction(new SelectionFunction());
    spread.suspendPaint();
    // 값 설정
    sheet.setArray(6, 6, [
        [1, 2, 3, 4],
        [5, 6, 7, 8],
        [9, 10, 11, 12]
    ]);
    // 열 너비 설정
    sheet.setColumnWidth(0, 120);
    sheet.setColumnWidth(1, 120);
    // 선택 추가
    sheet.setSelection(6, 6, 3, 4);
    sheet.setValue(0, 0, "DynamicRange:");
    // "Selection" 수식 추가
    sheet.setFormula(0, 1, "=Selection()");
    spread.resumePaint();
    spread.bind(GC.Spread.Sheets.Events.SelectionChanging, function (sendar, args) {
        args.sheet.recalcAll();
    });
});

// 사용자 정 함수
function SelectionFunction() {
    this.name = "SELECTION";
    this.minArgs = 0;
    this.maxArgs = 0;
};
SelectionFunction.prototype = new GC.Spread.CalcEngine.Functions.Function();
SelectionFunction.prototype.evaluate = function (context) {
    var sheet = context.source.getSheet();
    var sel = sheet.getSelections()[0];
    var dataArr = sheet.getArray(sel.row, sel.col, sel.rowCount, sel.colCount);
    return new GC.Spread.CalcEngine.CalcArray(dataArr);
}
SelectionFunction.prototype.isContextSensitive = function () {
    return true;
}