Class AbstractCalculationEngine
Namespace: Aspose.Cells
Assembly: Aspose.Cells.dll (25.2.0)
Reprezentuje niestandardowy silnik obliczeniowy użytkownika, aby rozszerzyć domyślny silnik obliczeniowy Aspose.Cells.
public abstract class AbstractCalculationEngine
Dziedziczenie
object ← AbstractCalculationEngine
Członkowie dziedziczeni
object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()
Przykłady
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))
{
// wykonaj obliczenia dla MYFUNC tutaj
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);
}
// przetwórz parametr tutaj
// res = ...;
}
data.CalculatedValue = res;
}
}
}
Uwagi
Użytkownik nie powinien modyfikować żadnej części Workbook bezpośrednio w tej implementacji (oprócz obliczonego wyniku niestandardowej funkcji, który można ustawić za pomocą właściwości CalculationData.CalculatedValue). W przeciwnym razie może wystąpić nieoczekiwany wynik lub wyjątek. Jeśli użytkownik musi zmienić inne dane niż obliczony wynik w implementacji dla niektórych niestandardowych funkcji, na przykład zmienić formułę komórki, styl itd., użytkownik powinien zgromadzić te dane w tej implementacji i zmienić je poza zakresem obliczeń formuły.
Konstruktory
AbstractCalculationEngine()
protected AbstractCalculationEngine()
Właściwości
IsParamArrayModeRequired
Wskazuje, czy ten silnik potrzebuje, aby parametr był obliczany w trybie tablicy. Wartość domyślna to false. Jeśli Aspose.Cells.CalculationData.GetParamValueInArrayMode(System.Int32,System.Int32,System.Int32) jest wymagane podczas obliczania niestandardowych funkcji, a użytkownik nie zaktualizował definicji dla nich (za pomocą Aspose.Cells.Workbook.UpdateCustomFunctionDefinition(Aspose.Cells.CustomFunctionDefinition)), ta właściwość musi być ustawiona na true.
public virtual bool IsParamArrayModeRequired { get; }
Wartość właściwości
Uwagi
Jeśli ten niestandardowy silnik obliczeniowy potrzebuje, aby parametr był obliczany w trybie tablicy, więcej stosów będzie wymaganych do przechowywania drzewa dla parametrów a metoda Calculate() może być wywoływana rekurencyjnie, aby obliczyć wartość parametru. Z uwagi na wydajność, należy zachować tę właściwość jako wartość domyślną (false) jeśli nie ma specjalnych wymagań.
IsParamLiteralRequired
Wskazuje, czy ten silnik potrzebuje tekstu literału parametru podczas obliczeń. Wartość domyślna to false.
public virtual bool IsParamLiteralRequired { get; }
Wartość właściwości
Uwagi
Jeśli ten niestandardowy silnik obliczeniowy potrzebuje literału tekstowego parametru, więcej stosów będzie wymaganych do przechowywania literału tekstowego dla parametrów a metoda Calculate() może być wywoływana rekurencyjnie, aby obliczyć wartość parametru. Zazwyczaj tekst literału nie jest potrzebny do obliczania formuł i tę właściwość należy utrzymywać jako false w większości implementacji, aby uzyskać lepszą wydajność.
ProcessBuiltInFunctions
Czy wbudowane funkcje, które zostały obsłużone przez wbudowany silnik, powinny być sprawdzane i przetwarzane przez tę implementację. Wartość domyślna to false.
public virtual bool ProcessBuiltInFunctions { get; }
Wartość właściwości
Uwagi
Jeśli użytkownik musi zmienić logikę obliczeń niektórych wbudowanych funkcji, ta właściwość powinna być ustawiona na true. W przeciwnym razie proszę pozostawić tę właściwość jako false z uwagi na wydajność.
Metody
Calculate(CalculationData)
Oblicza jedną funkcję z danymi.
public abstract void Calculate(CalculationData data)
Parametry
data
CalculationData
dane wymagane do obliczenia funkcji, takie jak nazwa funkcji, parametry itd.
Uwagi
Użytkownik powinien ustawić obliczoną wartość dla podanych danych dla wszystkich funkcji (w tym funkcji natywnych Excela) które chce obliczyć samodzielnie w tej implementacji.
ForceRecalculate(string)
Czy wymusić, aby podana funkcja była zawsze ponownie obliczana podczas obliczania formuł współdzielonych.
public virtual bool ForceRecalculate(string functionName)
Parametry
functionName
string
nazwa funkcji. Zazwyczaj jest to nazwa funkcji niestandardowej. Jeśli Aspose.Cells.AbstractCalculationEngine.ProcessBuiltInFunctions jest true, to wbudowane funkcje również będą sprawdzane tutaj.
Zwraca
true, jeśli określona funkcja musi być zawsze ponownie obliczana.
Uwagi
Dla formuł współdzielonych wiele komórek dzieli tę samą funkcję. Jeśli parametry funkcji również pozostają takie same dla tych komórek, to zazwyczaj ta funkcja musi być obliczana tylko raz. Z uwagi na wydajność obliczamy tego rodzaju funkcję tylko raz (Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) jest wywoływana tylko raz, zamiast być wywoływaną wielokrotnie dla każdej komórki). Jednak dla niestandardowej implementacji użytkownika, być może funkcja, szczególnie funkcja niestandardowa, musi być obliczana inaczej dla różnych komórek. Jeśli tak, użytkownik musi nadpisać tę metodę, aby zwracała true dla tej funkcji. A dla Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) podana wartość Aspose.Cells.CalculationData.CalculatedValue może być zainicjowana wartością z poprzedniego obliczenia.
SkipCalculation()
protected void SkipCalculation()