Class AbstractCalculationEngine
Namespace: Aspose.Cells
Assembly: Aspose.Cells.dll (25.2.0)
Stellt die benutzerdefinierte Berechnungsengine des Benutzers dar, um die Standardberechnungsengine von Aspose.Cells zu erweitern.
public abstract class AbstractCalculationEngine
Vererbung
object ← AbstractCalculationEngine
Vererbte Mitglieder
object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()
Beispiele
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))
{
//Berechnung für MYFUNC hier durchführen
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);
}
//Verarbeiten Sie den Parameter hier
//res = ...;
}
data.CalculatedValue = res;
}
}
}
Anmerkungen
Der Benutzer sollte in dieser Implementierung keinen Teil des Arbeitsbuchs direkt ändern (außer dem berechneten Ergebnis der benutzerdefinierten Funktion, das über die Eigenschaft CalculationData.CalculatedValue festgelegt werden kann). Andernfalls können unerwartete Ergebnisse oder Ausnahmen auftreten. Wenn der Benutzer andere Daten als das berechnete Ergebnis in der Implementierung für einige benutzerdefinierte Funktionen ändern muss, z. B. die Formel, den Stil usw., sollte der Benutzer diese Daten in dieser Implementierung sammeln und sie außerhalb des Geltungsbereichs der Formelberechnung ändern.
Konstruktoren
AbstractCalculationEngine()
protected AbstractCalculationEngine()
Eigenschaften
IsParamArrayModeRequired
Gibt an, ob diese Engine den Parameter im Array-Modus berechnet werden muss. Der Standardwert ist false. Wenn Aspose.Cells.CalculationData.GetParamValueInArrayMode(System.Int32,System.Int32,System.Int32) beim Berechnen von benutzerdefinierten Funktionen benötigt wird und der Benutzer die Definition dafür nicht aktualisiert hat (durch Aspose.Cells.Workbook.UpdateCustomFunctionDefinition(Aspose.Cells.CustomFunctionDefinition)), muss diese Eigenschaft auf true gesetzt werden.
public virtual bool IsParamArrayModeRequired { get; }
Eigenschaftswert
Anmerkungen
Wenn diese benutzerdefinierte Berechnungsengine den Parameter im Array-Modus berechnen muss, werden mehr Stacks benötigt, um den Baum für Parameter zwischenzuspeichern, und die Methode Calculate() kann rekursiv aufgerufen werden, um den Wert des Parameters zu berechnen. Aus Leistungsgründen sollte diese Eigenschaft auf den Standardwert (false) belassen werden, wenn keine besonderen Anforderungen bestehen.
IsParamLiteralRequired
Gibt an, ob diese Engine den Literalsatz des Parameters während der Berechnung benötigt. Der Standardwert ist false.
public virtual bool IsParamLiteralRequired { get; }
Eigenschaftswert
Anmerkungen
Wenn diese benutzerdefinierte Berechnungsengine den Literaltext des Parameters benötigt, werden mehr Stacks benötigt, um den Literaltext für Parameter zwischenzuspeichern, und die Methode Calculate() kann rekursiv aufgerufen werden, um den Wert des Parameters zu berechnen. Im Allgemeinen wird der Literaltext nicht für die Berechnung von Formeln benötigt, und diese Eigenschaft sollte für die meisten Implementierungen auf false belassen werden, um eine bessere Leistung zu erzielen.
ProcessBuiltInFunctions
Ob die integrierten Funktionen, die von der integrierten Engine unterstützt werden, von dieser Implementierung überprüft und verarbeitet werden sollten. Standard ist false.
public virtual bool ProcessBuiltInFunctions { get; }
Eigenschaftswert
Anmerkungen
Wenn der Benutzer die Berechnungslogik einiger integrierter Funktionen ändern muss, sollte diese Eigenschaft auf true gesetzt werden. Andernfalls sollte diese Eigenschaft aus Leistungsgründen auf false belassen werden.
Methoden
Calculate(CalculationData)
Berechnet eine Funktion mit den gegebenen Daten.
public abstract void Calculate(CalculationData data)
Parameter
data
CalculationData
die erforderlichen Daten zur Berechnung der Funktion, wie Funktionsname, Parameter usw.
Anmerkungen
Der Benutzer sollte den berechneten Wert für die gegebenen Daten für alle Funktionen (einschließlich der nativen Excel-Funktionen) festlegen, die er in dieser Implementierung selbst berechnen möchte.
ForceRecalculate(string)
Ob die gegebene Funktion immer neu berechnet werden soll, wenn gemeinsame Formeln berechnet werden.
public virtual bool ForceRecalculate(string functionName)
Parameter
functionName
string
Name der Funktion. Im Allgemeinen ist es der Name der benutzerdefinierten Funktion. Wenn Aspose.Cells.AbstractCalculationEngine.ProcessBuiltInFunctions true ist, werden auch die integrierten Funktionen hier überprüft.
Gibt zurück
true, wenn die angegebene Funktion immer neu berechnet werden muss.
Anmerkungen
Bei gemeinsamen Formeln teilen sich mehrere Zellen dieselbe Funktion. Wenn die Parameter der Funktion auch für diese Zellen gleich bleiben, muss diese Funktion im Allgemeinen nur einmal berechnet werden. Daher berechnen wir solche Funktionen auch nur einmal (Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) wird nur einmal aufgerufen, anstatt wiederholt für jede Zelle aufgerufen zu werden). Für die benutzerdefinierte Implementierung des Benutzers muss die Funktion, insbesondere die benutzerdefinierte Funktion, jedoch möglicherweise unterschiedlich für verschiedene Zellen berechnet werden. Wenn dies der Fall ist, muss der Benutzer diese Methode überschreiben, um true für die Funktion zurückzugeben. Und für Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) könnte der gegebene Aspose.Cells.CalculationData.CalculatedValue möglicherweise mit dem zwischengespeicherten Wert der vorherigen Berechnung initialisiert worden sein.
SkipCalculation()
protected void SkipCalculation()