Class AbstractCalculationEngine
Namespace: Aspose.Cells
Assembly: Aspose.Cells.dll (25.2.0)
사용자의 커스텀 계산 엔진을 나타내며, Aspose.Cells의 기본 계산 엔진을 확장합니다.
public abstract class AbstractCalculationEngine
상속
object ← AbstractCalculationEngine
상속된 멤버
object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()
예제
Workbook wb = new Workbook("custom_calc.xlsx");
CalculationOptions opts = new CalculationOptions();
opts.CustomEngine = new MyEngine();
wb.CalculateFormula(opts);
class MyEngine : AbstractCalculationEngine
{
public override void Calculate(CalculationData data)
{
string funcName = data.FunctionName.ToUpper();
if ("MYFUNC".Equals(funcName))
{
// MYFUNC에 대한 계산 수행
int count = data.ParamCount;
object res = null;
for (int i = 0; i < count; i++)
{
object pv = data.GetParamValue(i);
if (pv is ReferredArea)
{
ReferredArea ra = (ReferredArea)pv;
pv = ra.GetValue(0, 0);
}
// 여기에서 매개변수 처리
// res = ...;
}
data.CalculatedValue = res;
}
}
}
비고
사용자는 이 구현에서 Workbook의 어떤 부분도 직접 수정해서는 안 됩니다(계산된 결과인 커스텀 함수의 결과는 CalculationData.CalculatedValue 속성을 통해 설정할 수 있습니다). 그렇지 않으면 예기치 않은 결과나 예외가 발생할 수 있습니다. 사용자가 특정 커스텀 함수의 계산된 결과 외에 다른 데이터를 변경해야 하는 경우, 예를 들어 셀의 수식, 스타일 등을 변경해야 하는 경우, 사용자는 이 구현에서 해당 데이터를 수집하고 수식 계산 범위를 벗어나서 변경해야 합니다.
생성자
AbstractCalculationEngine()
protected AbstractCalculationEngine()
속성
IsParamArrayModeRequired
이 엔진이 매개변수를 배열 모드로 계산할 필요가 있는지 여부를 나타냅니다. 기본값은 false입니다. Aspose.Cells.CalculationData.GetParamValueInArrayMode(System.Int32,System.Int32,System.Int32)가 커스텀 함수 계산 시 필요하고 사용자가 이를 위해 정의를 업데이트하지 않은 경우 (Aspose.Cells.Workbook.UpdateCustomFunctionDefinition(Aspose.Cells.CustomFunctionDefinition)로), 이 속성은 true로 설정해야 합니다.
public virtual bool IsParamArrayModeRequired { get; }
속성 값
비고
이 커스텀 계산 엔진이 매개변수를 배열 모드로 계산해야 하는 경우, 매개변수의 트리를 캐시하기 위해 더 많은 스택이 필요하며 Calculate() 메서드가 매개변수의 값을 계산하기 위해 재귀적으로 호출될 수 있습니다. 성능을 고려하여 특별한 요구 사항이 없는 경우 이 속성을 기본값(false)으로 유지하십시오.
IsParamLiteralRequired
이 엔진이 계산 중에 매개변수의 리터럴 텍스트가 필요하는지 여부를 나타냅니다. 기본값은 false입니다.
public virtual bool IsParamLiteralRequired { get; }
속성 값
비고
이 커스텀 계산 엔진이 매개변수의 리터럴 텍스트가 필요하는 경우, 매개변수의 리터럴 텍스트를 캐시하기 위해 더 많은 스택이 필요하며 Calculate() 메서드가 매개변수의 값을 계산하기 위해 재귀적으로 호출될 수 있습니다. 일반적으로 수식을 계산하는 데 리터럴 텍스트가 필요하지 않으며, 대부분의 구현에서 성능을 향상시키기 위해 이 속성은 false로 유지되어야 합니다.
ProcessBuiltInFunctions
내장 엔진에서 지원하는 내장 함수가 이 구현에서 확인되고 처리되어야 하는지 여부입니다. 기본값은 false입니다.
public virtual bool ProcessBuiltInFunctions { get; }
속성 값
비고
사용자가 일부 내장 함수의 계산 논리를 변경해야 하는 경우, 이 속성은 true로 설정해야 합니다. 그렇지 않으면 성능을 고려하여 이 속성을 false로 유지하십시오.
메서드
Calculate(CalculationData)
주어진 데이터로 하나의 함수를 계산합니다.
public abstract void Calculate(CalculationData data)
매개변수
data
CalculationData
함수를 계산하는 데 필요한 데이터(예: 함수 이름, 매개변수 등).
비고
사용자는 이 구현에서 자신이 계산하고자 하는 모든 함수(엑셀 기본 함수 포함)에 대해 주어진 데이터의 계산된 값을 설정해야 합니다.
ForceRecalculate(string)
공유 수식을 계산할 때 항상 주어진 함수를 강제로 재계산해야 하는지 여부입니다.
public virtual bool ForceRecalculate(string functionName)
매개변수
functionName
string
함수의 이름입니다. 일반적으로 커스텀 함수의 이름입니다. Aspose.Cells.AbstractCalculationEngine.ProcessBuiltInFunctions가 true인 경우 내장 함수도 여기에서 확인됩니다.
반환값
지정된 함수가 항상 재계산되어야 하는 경우 true입니다.
비고
공유 수식의 경우 여러 셀이 동일한 함수를 공유합니다. 해당 셀의 함수 매개변수가 동일하다면 일반적으로 이 함수는 한 번만 계산될 필요가 있습니다. 따라서 성능을 고려하여 이러한 종류의 함수도 한 번만 계산합니다(Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData)는 모든 셀에 대해 반복적으로 호출되는 대신 한 번만 호출됩니다). 그러나 사용자의 커스텀 구현에서는 함수, 특히 커스텀 함수가 서로 다른 셀에 대해 다르게 계산되어야 할 수도 있습니다. 그렇다면 사용자는 이 메서드를 재정의하여 함수에 대해 true를 반환해야 합니다. 그리고 Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData)에 대해 주어진 Aspose.Cells.CalculationData.CalculatedValue는 이전 계산의 캐시된 값으로 초기화되었을 수 있습니다.
SkipCalculation()
protected void SkipCalculation()