[]
SpreadJS는 수식이 참조하는 셀, 값 또는 이름이 변경되면 수식을 다시 계산합니다.
이 동작은 CalculationMode 옵션을 사용하여 제어할 수 있습니다.
CalculationMode는 GC.Spread.Sheets.CalculationMode에 정의되어 있습니다.
값 | 설명 |
|---|---|
| 종속성이 변경되면 모든 더티 셀을 자동으로 다시 계산합니다. (기본값) |
|
|
|
|
auto 모드에서는:
SpreadJS가 모든 더티 셀을 자동으로 다시 계산합니다.
셀의 값 또는 종속성이 변경되면 해당 셀은 더티 상태로 표시됩니다.
셀 입력, 복사 또는 붙여넣기와 같은 작업 중에 다시 계산이 수행됩니다.
이를 통해 워크시트 결과가 항상 최신 상태로 유지됩니다.
manual 모드에서는:
어떤 수식도 자동으로 다시 계산되지 않습니다.
반드시 spread.calculate()를 명시적으로 호출해야 합니다.
이 모드는 다음과 같은 경우에 유용합니다.
복잡한 수식이 포함된 대규모 워크시트 작업
일괄 업데이트 수행
대량 작업 중 중간 계산 방지
var spread = new GC.Spread.Sheets.Workbook("ss", { calculationMode: GC.Spread.Sheets.CalculationMode.manual });또는:
spread.options.calculationMode = GC.Spread.Sheets.CalculationMode.manual;다시 계산하려면:
spread.calculate();partial 모드에서는:
일반 수식은 자동으로 다시 계산됩니다.
SJS.TABLE 수식은 자동으로 다시 계산되지 않습니다.
SJS.TABLE은 spread.calculate()가 호출될 때만 업데이트됩니다.
이 모드는 대규모 데이터 테이블을 사용하는 시나리오에서 모든 시뮬레이션을 자동으로 다시 계산할 경우 성능에 영향을 줄 수 있는 상황을 위해 설계되었습니다.
예제:
spread.options.calculationMode = GC.Spread.Sheets.CalculationMode.partial;참고:
CalculationMode설정은 Excel 파일 형식에서 지원되는 경우 Excel로 내보낼 때 유지됩니다.
spread.calculate() 메서드는 다시 계산 범위를 제어하기 위해 CalculationType 값을 받습니다.
멤버 | 설명 |
|---|---|
| 지정된 범위의 모든 셀을 더티 상태로 표시하고 다시 계산합니다. (기본값) |
| 범위 내 모든 수식을 다시 빌드한 후 다시 계산합니다. |
| 수식을 더티 상태로 표시하지만 volatile 셀 또는 순환 참조 셀은 더티 상태로 표시하지 않습니다. |
| volatile 셀, 순환 참조 셀 및 더티 셀을 다시 계산합니다. |
다음 표는 계산 제어 API와 함께 서로 다른 계산 모드를 사용할 때의 SpreadJS 동작을 요약한 것입니다.
사용된 수식 | 자동 (기본 모드) | 수동 |
|---|---|---|
suspendCalcService(true) | 계산 엔진을 비활성화하고 어떤 셀도 다시 계산하지 않습니다. | |
resumeCalcService(false) | 계산 엔진을 활성화하고 volatile 셀, 순환 참조 셀 및 더티 셀을 계산합니다. | 계산 엔진을 활성화하고 volatile 셀을 더티 상태로 표시하지만 더티 셀은 계산하지 않습니다. |
resumeCalcService(true) | 계산 엔진을 활성화하고 모든 셀을 계산합니다. | 계산 엔진을 활성화하고 모든 셀을 더티 상태로 표시하지만 더티 셀은 계산하지 않습니다. |
resumeCalcService(false) and sheet.setFormula | 수식 및 해당 종속성을 계산합니다. | 수식을 계산합니다. |
resumeCalcService(false) and spread.calculate() | 열려 있는 모든 워크시트의 모든 수식을 계산합니다. | |
resumeCalcService(false) and spread.calculate(GC.Spread.Sheets.CalculationType.regular) | 더티 상태로 표시된 모든 셀(즉, volatile 데이터 또는 변경 가능한 데이터에 종속된 셀과 프로그래밍 방식으로 더티 상태로 표시된 셀)을 계산합니다. | |
resumeCalcService(false) and spread.calculate(GC.Spread.Sheets.CalculationType.rebuild) | 스프레드의 모든 수식을 다시 빌드한 후 계산합니다. | |
resumeCalcService(false) and spread.calculate(null, “Sheet1“) | Sheet1의 모든 수식을 더티 상태로 표시한 후 범위 밖 종속성도 더티 상태로 표시합니다. 모든 더티 셀을 계산합니다. | Sheet1의 모든 수식을 더티 상태로 표시한 후 범위 밖 종속성도 더티 상태로 표시합니다. Sheet1의 더티 셀을 계산합니다. 다른 셀은 더티 상태를 유지합니다. |
참고:
sheet.recalcAll()메서드는 SpreadJS v16.2에서 더 이상 사용되지 않습니다. 대신spread.calculate()를 사용하세요.
spread.sheets[0].setFormula(0,0,"RAND()");
spread.sheets[0].setFormula(1,0,"=Sheet2!A1");
spread.sheets[0].setFormula(2,0,"=1+2");
spread.sheets[1].setFormula(0,0,"RAND()");
spread.sheets[1].setFormula(1,0,"=Sheet1!A1");
// All the cell is recalculated.
spread.calculate(); spread.calculate(GC.Spread.Sheets.CalculationType.regular);
// Sheet1!A1 Sheet2!A2 are evaluated to new number, and Sheet1!A2 Sheet1!A3 are evaluated.
spread.calculate(GC.Spread.Sheets.CalculationType.all, "Sheet1");
// Sheet1!A1 Sheet2!A2 are evaluated to new number.
spread.calculate(GC.Spread.Sheets.CalculationType.regular, "Sheet1!A1");
// No cells are evaluated.
spread.calculate(GC.Spread.Sheets.CalculationType.regular, "Sheet1!A2");
// Sheet1!A1 is evaluated to new number, Sheet1!A2 Sheet1!A3 are evaluated but don't changed, Sheet2!A2 keeps dirty in manual mode.
spread.calculate(GC.Spread.Sheets.CalculationType.all, "Sheet1");
// Sheet1!A1 is evaluated to new number, Sheet2!A2 keeps dirty in manual mode.
spread.calculate(GC.Spread.Sheets.CalculationType.regular, "Sheet1");
// Sheet2!A2 is evaluated because it is dirty.
spread.calculate(GC.Spread.Sheets.CalculationType.minimal);다음 위치에서 SpreadJS 디자이너의 계산 옵션을 구성할 수 있습니다.
FORMULAS → Calculation Options

수동 계산 모드의 경우, 통합 문서의 어느 영역을 다시 계산할지 선택해야 합니다.
지금 계산(Calculate Now) 버튼을 클릭하면 열려 있는 모든 워크시트의 변경 사항이 업데이트됩니다.

시트 계산(Calculate Sheet) 버튼을 클릭하면 현재 워크시트에 대해서만 변경 사항이 반영됩니다.
