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)
指定されたデータで1つの関数を計算します。
public abstract void Calculate(CalculationData data)
パラメータ
data
CalculationData
関数を計算するために必要なデータ(関数名、パラメータなど)。
注意事項
ユーザーはこの実装内で自分自身で計算したいすべての関数(Excelネイティブ関数を含む)に対して、指定されたデータの計算値を設定する必要があります。
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()