[]
        
(Showing Draft Content)

계산 모드

SpreadJS는 수식에서 참조된 값(셀, 값 또는 수식에서 참조된 이름)이 변경되면 수식을 자동으로 업데이트합니다. 그러나 참조된 셀에 변경이 있을 때마다 수식이 즉시 다시 계산되지 않도록 제어하려면 자동 계산을 수동으로 전환할 수 있습니다. SpreadJS API의 CalculationMode 열거형을 사용하면 계산 옵션을 auto 또는 manual로 설정할 수 있습니다.

CalculationMode가 auto(기본 모드)로 설정되면, 참조된 셀이 변경될 때마다 SpreadJS는 모든 더티 셀을 자동으로 계산합니다. 예를 들어 복사-붙여넣기 또는 셀 입력 시 계산이 이루어집니다. SpreadJS는 셀이 변경되어 결과적으로 다시 계산이 필요할 때 해당 셀을 더티 상태로 간주합니다.

반면 CalculationMode가 manual로 설정되면, 사용자가 명시적으로 요청할 때만 SpreadJS가 수식을 계산하고 업데이트합니다. 이는 복잡한 수식이 많은 대형 워크시트에서 빈번한 재계산을 피하여 성능과 반응성을 향상시키는 데 유용합니다. 예를 들어, SpreadJS는 값 잘라내기 또는 복사-붙여넣기 시 수식과 셀 값을 재설정하지만 수식을 다시 계산하지는 않습니다.

참고: SpreadJS는 Excel로 내보낼 때 CalculationMode 옵션을 지원합니다.

다음 코드 샘플은 워크북을 초기화할 때 수동 계산 옵션을 설정하는 방법을 보여줍니다.

//  워크북 초기화 시 수동 모드로 전환합니다.
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), {calculationMode: GC.Spread.Sheets.CalculationMode.manual});

Or

spread.options.calculationMode = GC.Spread.Sheets.CalculationMode.manual;

수동 계산 모드로 전환한 후에는, calculate() 메서드를 사용하여 워크시트의 수식을 수동으로 업데이트해야 합니다. 이 메서드는 CalculationType 열거형 값을 매개변수로 받습니다.

CalculationType 열거형은 계산 유형을 지정합니다. 이 열거형의 사용 가능한 멤버는 아래에 설명되어 있습니다.

멤버

설명

all

범위 내의 모든 셀을 계산을 위해 더티 상태로 표시합니다. 기본 계산 유형입니다.

rebuild

범위 내의 모든 수식을 다시 구성한 후 계산을 위해 더티 상태로 표시합니다.

minimal

수식을 더티 상태로 표시하지만 변동 셀과 순환 참조 셀은 계산하지 않습니다.

regular

변동 셀 및 순환 참조 셀을 계산을 위해 더티 상태로 표시합니다.

다음 표를 통해 다양한 수식 및 그 의존성을 기준으로 자동 및 수동 계산 모드에서 SpreadJS의 동작을 확인할 수 있습니다.

사용한 수식 조합

자동 (기본 모드)

수동

suspendCalcService(true)

계산 엔진을 비활성화하고 어떤 셀도 다시 계산하지 않습니다.

resumeCalcService(false)

계산 엔진을 활성화하고 변동 셀, 순환 참조 셀, 더티 셀을 계산합니다.

계산 엔진만 활성화하고 더티 셀은 계산하지 않음

resumeCalcService(true)

계산 엔진을 활성화하고 모든 셀을 계산합니다.

계산 엔진을 활성화하고 모든 셀을 더티 상태로 만들지만 계산하지 않음

resumeCalcService(false) 및 sheet.setFormula

수식과 해당 의존성을 계산합니다.

수식만 계산됨

resumeCalcService(false) 및 spread.calculate()

모든 열린 워크시트의 모든 수식을 계산합니다.

resumeCalcService(false) 및 spread.calculate(GC.Spread.Sheets.CalculationType.regular)

변동 데이터 및 더티로 표시된 셀을 포함하여 모든 더티 셀을 계산합니다.

resumeCalcService(false) 및 spread.calculate(GC.Spread.Sheets.CalculationType.rebuild)

모든 수식을 재구성하고 계산합니다.

resumeCalcService(false) 및 spread.calculate(null, "Sheet1")

Sheet1의 모든 수식을 더티로 만들고 범위 밖의 의존성도 더티 처리하여 계산합니다.

Sheet1의 더티 셀을 계산하고 다른 셀은 더티 상태 유지

참고: 셀의 수식을 다시 계산하기 위한 기존 메서드인 sheet.recalcAll()은 SpreadJS v16.2 버전부터 더 이상 사용되지 않습니다. 대신 spread.calculate() 메서드를 사용할 수 있습니다.

다음 코드 샘플은 SpreadJS에서 다양한 계산 모드와 유형을 사용하는 예를 보여줍니다.

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");

// 모든 셀 계산
spread.calculate(); spread.calculate(GC.Spread.Sheets.CalculationType.regular); 

// Sheet1!A1 및 Sheet2!A2는 새 숫자로 계산되고, Sheet1!A2 및 Sheet1!A3도 계산됩니다.
spread.calculate(GC.Spread.Sheets.CalculationType.all, "Sheet1"); 

// Sheet1!A1 및 Sheet2!A2는 새 숫자로 계산됩니다.
spread.calculate(GC.Spread.Sheets.CalculationType.regular, "Sheet1!A1"); 

// 아무 셀도 계산되지 않습니다.
spread.calculate(GC.Spread.Sheets.CalculationType.regular, "Sheet1!A2"); 

// Sheet1!A1은 새 숫자로 계산되며 Sheet1!A2 및 Sheet1!A3도 계산되지만 변경되지 않음, Sheet2!A2는 수동 모드에서 더티 상태 유지
spread.calculate(GC.Spread.Sheets.CalculationType.all, "Sheet1"); 

// Sheet1!A1은 새 숫자로 계산되며 Sheet2!A2는 수동 모드에서 더티 상태 유지
spread.calculate(GC.Spread.Sheets.CalculationType.regular, "Sheet1"); 

// Sheet2!A2는 더티 상태이므로 계산됩니다.
spread.calculate(GC.Spread.Sheets.CalculationType.minimal);

SpreadJS 디자이너 사용하기

SpreadJS 디자이너에서는 수식(FORMULAS) >계산(Calculations) 탭 그룹의 '계산 옵션(Calculation Options)' 버튼을 선택하여 원하는 계산 옵션을 설정할 수 있습니다.


CalculationOptions


수동 계산 모드에서는 워크북의 어느 영역을 다시 계산할 것인지 선택해야 합니다.

  • 지금 계산(Calculate Now) 버튼을 클릭하면 모든 열린 워크시트에서 변경 사항을 업데이트합니다.

CalculateNow

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

CalculateSheet