# setValue (method)

> 셀의 값을 지정한 값으로 변경합니다.
> 기본적으로 이 함수를 호출해도 편집 관련 이벤트(`onAfterChange`, `onEndEdit` 등)는 발생하지 않습니다.
> 단, 데이터가 편집 상태일 때 `setValue`를 호출하면 `onEndEdit` 이벤트가 발생합니다.
> 이 경우 `ignoreEvent`옵션을 사용하여 이벤트 발생을 방지할 수 있습니다.
> 값 변경 시 `Change` 이벤트 처리가 필요한 경우 OnChange 이벤트를 사용해야 합니다.

### Syntax

    boolean setValue( row, col, val, render, ignoreEvent, noCalc );

### Parameters

Name | Type | Required | Description
--- | --- | --- | ---
row | `object` | 필수 | 데이터 로우 객체
col | `string` | 필수 | 열이름
val | `number` | `string` | 필수 | 입력값(셀 타입에 맞는 값)
render | `boolean` | 선택 | 값 변경 시 즉시 화면에 반영할지 여부입니다. `false(0)`로 설정할 경우 화면에 즉시 반영되지 않으며, 작업 완료 후 `rerender()` 또는 상황에 따라 `refreshCell`, `refreshRow`, `renderBody` 등의 렌더링 함수를 호출해야 합니다. `true(1)`: 즉시 반영 (`default`)
ignoreEvent | `object` | `boolean` | 선택 | `setValue` 호출 시 발생하는 이벤트를 제어하는 옵션입니다. 객체 형태로 설정할 수 있으며, 이벤트 이름을 key로 지정하고 `true`로 설정하면 해당 이벤트는 발생하지 않습니다. `true / false`로 설정할 경우 `onEndEdit` 이벤트만 제어합니다.
calc | `boolean` | 선택 | 포뮬러 계산 여부 해당 기능을 `0(false)`로 설정할 경우 `setValue`시 포뮬러 계산이 이뤄지지 않습니다. 포뮬러를 반영하려면 이후 반드시 `calculate()`를 호출해줘야 됩니다.(`default:1`)

### ignoreEvent Options

Name | Type | Required | Description
--- | --- | --- | ---
OnChange | `boolean` | 선택 | `setValue`시 발생하는 `OnChange` 이벤트 발생 여부를 제어합니다. true 리턴시 해당 이벤트가 발생하지 않습니다. (`default: 0(false)`)
OnSame | `boolean` | 선택 | `setValue`시 발생하는 `OnSame` 이벤트 발생 여부를 제어합니다. true 리턴시 해당 이벤트가 발생하지 않습니다. (`default: 0(false)`)
onEndEdit | `boolean` | 선택 | 편집상태에서 `setValue`를 할 경우, 기본적으로 `onEndEdit` 이벤트가 발생합니다. 이때 발생하는 `onEndEdit` 이벤트의 발생 여부를 제어합니다. true를 리턴할 경우, 해당 이벤트가 발생하지 않습니다. (`default: 0(false)`)

### Return Value

boolean : 값의 변경 여부 (값이 변경되면 `1(true)`, 변경되지 않으면(기존값과 동일한 경우) `0(false)`)

### Example

    // ================================
    // 데이터행 변경 예제
    // ================================

    // 5번째 행 가져오기 (row 객체의 id가 AR5이다.)
    var r5 = sheet.getRowById("AR5");

    // AR5 데이터 행의 StartDate, EndDate 값을 변경
    sheet.setValue( r5, "StartDate", "20160105");
    sheet.setValue({row:r5, col:"EndDate", val:"20160315"});

    //OnChange, onEndEdit 발생시키지 않음
    sheet.setValue({row:r5, col:"A", val:10, ignoreEvent:{onEndEdit:true,OnChange:true}});

    // ================================
    // 데이터행 변경 예제
    // 여러 행 반복 처리 (calc:0, render:0으로 매번 계산·렌더링 생략 — 성능 최적화)
    // ================================

    var Rows = sheet.getDataRows(); //시트의 모든 데이터 행 추출

    for(var i=0; i<Rows.length; i++){
        //마감열(Name:close_data) 컬럼 값 일괄 변경
        sheet.setValue({row:Rows[i], col:"close_data", val:"변경", calc:0, render:0});
    }
    // 마지막에 Formula 한 번만 계산 + 화면 일괄 반영
    sheet.calculate(false, false);
    sheet.rerender(1);

    // ================================
    //헤더행 변경 예제
    // ================================

    var hr = sheet.getRowById("Header"); // 최상단 헤더 행 가져오기

    // 특정 컬럼 헤더 텍스트 변경
    sheet.setValue(hr, "SalesToday", "매출");
    sheet.setValue(hr, "SalesSum", "매출");
    sheet.setValue(hr, "CostToday", "비용");
    sheet.setValue(hr, "CostSum", "비용");

    // 헤더 텍스트 변경 후 경우에 따라 Merge 재적용(행 기준 병합)
    sheet.setAutoMerge( {headerMerge:2});

    // ================================
    //합계행 변경 예제
    // ================================

    //(Col) FormulaRow 설정한 합계 컬럼은 자동 계산되므로 setValue로 직접 변경할 수 없습니다.
    var sumRow = sheet.getRowById("FormulaRow"); // 합계행 가져오기

    //(Col) FormulaRow가 적용되지 않은 컬럼은 변경 가능
    sheet.setValue(sumRow , "Notes", "합계 참조용 메모");

### Read More

- getDataRows method
- getRowById method
- getValue method
- getString method
- setString method
- setAutoMerge method
- setRowValue method
- calculate method
- recalculate method
- recalculateRows method
- rerender method
- refreshCell method
- refreshRow method
- renderBody method

### Since

product | version | desc
--- | --- | ---
core | 8.0.0.0 | 기능 추가
core | 8.0.0.11 | `ignoreOnEndEdit` 추가
core | 8.2.0.21 | `ignoreEvent` 추가, `ignoreOnEndEdit` deprecated 처리
core | 8.3.0.45 | `calc` 추가