# Formula (col)

> 엑셀 수식과 같은 개념으로, 컬럼에 수식을 설정하면 모든 행에서 다른 컬럼의 값을 이용하여 셀 값을 자동 계산합니다.
> 함수 형태로 설정 시 반드시 `return`값이 있어야 반영됩니다.
> CanFormula가 `1`로 설정되어야 동작하며, 계산 순서를 위해 CalcOrder를 정의해야 합니다.
> 조회되거나 연관된 열의 값이 편집에 의해 변경될 때 자동으로 계산됩니다.
> 자신의 컬럼값을 Formula로 수정하면 무한루프에 빠질 수 있으므로 권장하지 않습니다.
> 데이터에 따라 편집 제어, 색상 변경 등 셀의 속성을 수식으로 설정하려면 attribute+Formula (col), attribute+Formula (row)를 참고하세요.

### Type

`mixed`( `function` | `string` )

### Options

Value | Description
--- | ---
`string` | 컬럼명을 그대로 식에 사용하는 수식 문자열 (예: `"qt1 + qt2 - discount * 0.1"`)
`function` | 계산 결과를 `return`하는 함수. 인자(`fr`)로 현재 행/시트 정보 전달 — `fr.Row[컬럼명]`으로 값, `fr.Sheet`/`fr.Col`로 시트·컬럼명 접근

### Example

    // function 형식 — yearSum이 먼저 계산되고 total이 그 결과를 참조
    options.Def.Row = {CanFormula: 1, CalcOrder: "yearSum,total"};
    options.Cols = [
        {Type: "Int",   Name: "qt1"},
        {Type: "Int",   Name: "qt2"},
        {Type: "Int",   Name: "yearSum",
            Formula: function(fr) {
                return fr.Row["qt1"] + fr.Row["qt2"];
            }
        },
        {Type: "Float", Name: "rate"},
        {Type: "Float", Name: "total",
            Formula: function(fr) {
                return fr.Row["yearSum"] * fr.Row["rate"];
            }
        }
    ];

    // string 형식 — 컬럼명을 식에 그대로 사용 (간단한 계산에 적합)
    {Type: "Int",   Name: "yearSum", Formula: "qt1 + qt2"}
    {Type: "Float", Name: "total",   Formula: "yearSum * rate"}

    // X — 자기 자신을 참조하면 무한루프
    {Type: "Int", Name: "yearSum",
        Formula: function(fr) {
            return fr.Row["yearSum"] + fr.Row["qt2"]; // yearSum이 바뀌면 다시 Formula 실행 → 무한루프
        }
    }

### Try it

- Demo of Formula

### Read More

- CanFormula row
- CalcOrder row
- attribute+Formula col
- Formula appendix

### Since

product | version | desc
--- | --- | ---
core | 8.0.0.0 | 기능 추가