[]
        
(Showing Draft Content)

함수 참조

함수 참조(Function Reference) 또는 에타 축소된 람다(eta-reduced lambda)는 함수가 인수에 대해 추가적인 연산을 수행할 필요가 없을 때 불필요한 추상화를 제거하여 함수를 단순화하는 방식입니다. 이를 통해 가능한 경우 축약된 문법을 사용할 수 있습니다.

SpreadJS는 사용자 정의 이름, LET 함수의 "name_value" 인수, LAMBDA 함수에서 함수 참조를 사용할 수 있으며, MAP, BYCOL, BYROW, MAKEARRAY, REDUCE, SCAN, GROUPBY 함수에서 LAMBDA 함수의 매개변수로도 사용할 수 있습니다. 또한 수식 함수에서 사용자 정의 함수에 대한 참조를 허용합니다.

사용자 정의 이름에서의 함수 참조

함수 이름을 내용으로 갖는 사용자 정의 이름을 정의하고, 이를 수식에서 사용할 수 있습니다.

// 셀에 값을 추가하세요.
sheet.setValue(0, 2, 10);
sheet.setValue(1, 2, 20);
sheet.setValue(2, 2, -5);
sheet.setValue(3, 2, 0);
sheet.setValue(4, 2, 20);
sheet.setValue(0, 0, "Formula Result: ->");
sheet.setValue(1, 0, "Formula Text: ->");

// 셀 B1의 색상을 설정하세요.
sheet.getCell(0, 1).backColor('yellow');
sheet.setValue(7, 0, "Added the custom name 'op' with content as 'SUM' function name.");

// 셀 B2에 FORMULATEXT 함수를 추가하세요.
sheet.setFormula(1, 1, "=FORMULATEXT(B1)");

// 함수 이름을 내용으로 하는 사용자 정의 이름을 추가하세요.
spread.addCustomName("op", "SUM");

// 사용자 정의 이름을 수식으로 사용하세요.
sheet.setFormula(0, 1, "op(C1:C5)");

LET 함수에서의 함수 참조

LET 함수의 “name_value” 인수를 함수로 정의하고, 이를 계산에 사용할 수 있습니다.

// 셀에 값을 추가하세요.
sheet2.setValue(0, 2, 10);
sheet2.setValue(1, 2, 20);
sheet2.setValue(2, 2, -5);
sheet2.setValue(3, 2, 0);
sheet2.setValue(4, 2, 20);
sheet2.setValue(0, 0, "Formula Result: ->");
sheet2.setValue(1, 0, "Formula Text: ->");

// 셀 B1의 색상을 설정하세요.
sheet2.getCell(0, 1).backColor('yellow');
sheet2.setValue(7, 0, "'SUM' 함수가 name_value로 정의되어 'LET' 함수에서 사용되었습니다.");

// 셀 B2에 FORMULATEXT 함수를 추가하세요.
sheet2.setFormula(1, 1, "=FORMULATEXT(B1)");

// "SUM" 함수로 "name_value"를 추가하고 이를 계산에 사용하세요.
sheet2.setFormula(0, 1, "=LET(op,SUM,op(C1:C5))");

LAMBDA 함수 매개변수에서의 함수 참조

함수 이름을 LAMBDA 함수의 매개변수로 사용하고 이를 계산에 활용할 수 있습니다. 또한, 함수 이름을 MAP, BYCOL, BYROW, MAKEARRAY, REDUCE, SCAN, GROUPBY 함수의 LAMBDA 함수 매개변수로 사용할 수 있습니다.

// LAMBDA 함수
// 셀에 값을 추가하세요.
sheet3.setValue(0, 0, "Formula Result: ->");
sheet3.setValue(1, 0, "Formula Text: ->");

// 셀 B1의 색상을 설정하세요.
sheet3.getCell(0, 1).backColor('yellow');

// LAMBDA 함수를 추가하세요.
sheet3.setFormula(0, 1, "=LAMBDA(op,op(123,231))(SUM)");

// 셀 B2에 FORMULATEXT 함수를 추가하세요.
sheet3.setFormula(1, 1, "=FORMULATEXT(B1)");


// MAP 함수
// 셀에 값을 추가하세요.
sheet3.setValue(5, 0, "Formula Result: ->");
sheet3.setValue(4, 0, "Formula Text: ->");

// 셀 B6:C9의 색상을 설정하세요.
sheet3.getRange("B6:C9").backColor('lightblue');

// 셀 B6의 색상을 설정하세요.
sheet3.getCell(5, 1).backColor('yellow');

// 워크시트에 표를 추가하세요.
sheet3.tables.add('table1', 4, 4, 5, 2);

// 표에 값을 추가하세요.
sheet3.setArray(4, 4, [
    ['Col1', 'Col2'],
    [20.33, -19],
    [-20.3, 0],
    [-12, -15.3],
    [17, 2]
]);

// 셀 B5에 FORMULATEXT 함수를 추가하세요.
sheet3.setFormula(4, 1, "=FORMULATEXT(B6)");

// 함수 이름을 LAMBDA 함수 매개변수로 사용하는 MAP 함수를 추가하세요.
sheet3.setFormula(5, 1, "=MAP(E6:F9,ABS)");


// BYCOL 함수
// 셀에 값을 추가하세요.
sheet3.setValue(10, 0, "Formula Text: ->");
sheet3.setValue(11, 0, "Formula Result: ->");

// 셀 B12:F12의 색상을 설정하세요.
sheet3.getRange("B12:F12").backColor('lightblue');

// 셀 B12의 색상을 설정하세요.
sheet3.getCell(11, 1).backColor('yellow');

// 워크시트에 표를 추가하세요.
sheet3.tables.add('table2', 10, 7, 3, 5);

// 표에 값을 추가하세요.
sheet3.setArray(10, 7, [
    ['Col1', 'Col2', 'Col3', 'Col4', 'Col5'],
    [1, 2, 9, 10, -5],
    [20, 0, 5, -3, 30]
]);

// 셀 B11에 FORMULATEXT 함수를 추가하세요.
sheet3.setFormula(10, 1, "=FORMULATEXT(B12)");

// 함수 이름을 LAMBDA 함수 매개변수로 사용하는 BYCOL 함수를 추가하세요.
sheet3.setFormula(11, 1, "=BYCOL(H12:L13,MAX)");


// GROUPBY 함수
// 셀에 값을 추가하세요.
sheet3.setValue(15, 0, "Formula Text: ->");
sheet3.setValue(16, 0, "Formula Result: ->");

// 셀 B17:D29의 색상을 설정하세요.
sheet3.getRange("B17:D29").backColor('lightblue');

// 셀 B17의 색상을 설정하세요.
sheet3.getCell(16, 1).backColor('yellow');

// 워크시트에 표를 추가하세요.
sheet3.tables.add('table3', 15, 7, 13, 7);

// 표에 값을 추가하세요.
sheet3.setArray(15, 7, [
    ['Year', 'Category', 'Product', 'Status', 'Sales', 'Rating', 'Profit'],
    [2023, 'Electronics', 'Smart TV', 'Active', 15000, 4.5, 250],
    [2023, 'Fashion', 'Designer Jeans', 'Discontinued', 8000, 4.7, 150],
    [2024, 'Food', 'Organic Granola', 'Active', 5000, 4.8, 100],
    [2023, 'Books', 'Bestseller Novel', 'Active', 12000, 4.6, 180],
    [2024, 'Electronics', 'Laptop', 'Active', 20000, 4.9, 300],
    [2023, 'Beauty', 'Skincare Set', 'Active', 7000, 4.4, 120],
    [2023, 'Home & Garden', 'Garden Tools', 'Active', 6500, 4.3, 130],
    [2024, 'Health', 'Fitness Tracker', 'Active', 9500, 4.6, 190],
    [2023, 'Toys', 'Action Figure', 'Active', 4800, 4.7, 95],
    [2024, 'Automotive', 'Car Accessories', 'Active', 3200, 4.5, 65],
    [2023, 'Sports', 'Basketball', 'Active', 7600, 4.8, 150],
    [2024, 'Office Supplies', 'Notebooks', 'Active', 11000, 4.4, 220]
]);

// 셀 B16에 FORMULATEXT 함수를 추가하세요.
sheet3.setFormula(15, 1, "=FORMULATEXT(B17)");

// 함수 이름을 LAMBDA 함수 매개변수로 사용하는 GROUPBY 함수를 추가하세요.
sheet3.setFormula(16, 1, "=GROUPBY(H16:I28,L16:L28,SUM)");

사용자 정의 함수 참조

사용자 정의 함수를 정의하고 이를 수식 함수에서 사용할 수 있습니다.

// 워크시트에 값을 추가하세요.
sheet4.setArray(0, 0, [
    [5, -3, 0],
    [23, -1, -4],
    [-13, 0, -12]
]);
sheet4.setValue(4, 0, "Formula Text: ->");
sheet4.setValue(5, 0, "Formula Result: ->");

// 셀 B6:D8의 색상을 설정하세요.
sheet4.getRange('B6:D8').backColor('lightblue');

// 셀 B6의 색상을 설정하세요.
sheet4.getCell(5, 1).backColor('yellow');

// 값이 0보다 작은지 확인하는 사용자 정의 함수를 정의하세요.
function IsNegativeFunction() {
    this.name = "ISNEGATIVE";
    this.maxArgs = 1;
    this.minArgs = 1;
}
IsNegativeFunction.prototype = new GC.Spread.CalcEngine.Functions.Function();
IsNegativeFunction.prototype.evaluate = function (arg) {
    if (parseInt(arg) < 0) {
return true;
    }
    return false;
};

// 워크북에 사용자 정의 함수를 추가하세요.
spread.addCustomFunction(new IsNegativeFunction());

// 사용자 정의 함수 이름을 LAMBDA 함수 매개변수로 사용하는 MAP 함수를 추가하세요.
sheet4.setFormula(5, 1, "=MAP(A1:C3,ISNEGATIVE)");

// 셀 B5에 FORMULATEXT 함수를 추가하세요.
sheet4.setFormula(4, 1, "=FORMULATEXT(B6)");

참고: 이 기능을 사용하려면 allowDynamicArray 속성을 활성화해야 합니다.