Class AbstractCalculationEngine
Namespace: Aspose.Cells
Assembly: Aspose.Cells.dll (25.2.0)
Reprezentuje uživatelský vlastní výpočetní engine pro rozšíření výchozího výpočetního enginu Aspose.Cells.
public abstract class AbstractCalculationEngine
Dědičnost
object ← AbstractCalculationEngine
Děděné členy
object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()
Příklady
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))
{
//provedení výpočtu pro MYFUNC zde
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);
}
//zpracování parametru zde
//res = ...;
}
data.CalculatedValue = res;
}
}
}
Poznámky
Uživatel by neměl přímo měnit žádnou část Workbooku v této implementaci (kromě vypočítaného výsledku vlastní funkce, který lze nastavit pomocí vlastnosti CalculationData.CalculatedValue). Jinak může dojít k neočekávanému výsledku nebo výjimce. Pokud uživatel potřebuje změnit jiná data než vypočítaný výsledek v implementaci pro některé vlastní funkce, například změnit vzorec buňky, styl, …atd., měl by uživatel shromáždit tato data v této implementaci a změnit je mimo rozsah výpočtu vzorce.
Konstruktor
AbstractCalculationEngine()
protected AbstractCalculationEngine()
Vlastnosti
IsParamArrayModeRequired
Indikuje, zda tento engine potřebuje, aby byl parametr vypočítán v režimu pole. Výchozí hodnota je false. Pokud je Aspose.Cells.CalculationData.GetParamValueInArrayMode(System.Int32,System.Int32,System.Int32) vyžadován při výpočtu vlastních funkcí a uživatel neaktualizoval definici pro ně (pomocí Aspose.Cells.Workbook.UpdateCustomFunctionDefinition(Aspose.Cells.CustomFunctionDefinition)), tato vlastnost musí být nastavena na true.
public virtual bool IsParamArrayModeRequired { get; }
Hodnota vlastnosti
Poznámky
Pokud tento vlastní výpočetní engine potřebuje, aby byl parametr vypočítán v režimu pole, bude vyžadováno více zásobníků pro ukládání stromu pro parametry a metoda Calculate() může být volána rekurzivně pro výpočet hodnoty parametru. Z hlediska výkonu, prosím, uchovávejte tuto vlastnost jako výchozí hodnotu (false) pokud neexistují žádné zvláštní požadavky.
IsParamLiteralRequired
Indikuje, zda tento engine potřebuje doslovný text parametru při provádění výpočtu. Výchozí hodnota je false.
public virtual bool IsParamLiteralRequired { get; }
Hodnota vlastnosti
Poznámky
Pokud tento vlastní výpočetní engine potřebuje doslovný text parametru, bude vyžadováno více zásobníků pro ukládání doslovného textu pro parametry a metoda Calculate() může být volána rekurzivně pro výpočet hodnoty parametru. Obecně není doslovný text potřebný pro výpočet vzorců a tuto vlastnost by měl většina implementací udržovat jako false pro lepší výkon.
ProcessBuiltInFunctions
Zda by měly být vestavěné funkce, které byly podporovány vestavěným enginem, zkontrolovány a zpracovány touto implementací. Výchozí hodnota je false.
public virtual bool ProcessBuiltInFunctions { get; }
Hodnota vlastnosti
Poznámky
Pokud uživatel potřebuje změnit logiku výpočtu některých vestavěných funkcí, tato vlastnost by měla být nastavena na true. Jinak prosím nechte tuto vlastnost jako false z hlediska výkonu.
Metody
Calculate(CalculationData)
Vypočítá jednu funkci s danými daty.
public abstract void Calculate(CalculationData data)
Parametry
data
CalculationData
požadovaná data pro výpočet funkce, jako je název funkce, parametry, …atd.
Poznámky
Uživatel by měl nastavit vypočítanou hodnotu pro daná data pro všechny funkce (včetně nativních funkcí Excel), které chce vypočítat sám v této implementaci.
ForceRecalculate(string)
Zda vždy vynutit znovu výpočet dané funkce při výpočtu sdílených vzorců.
public virtual bool ForceRecalculate(string functionName)
Parametry
functionName
string
název funkce. Obecně je to název vlastní funkce. Pokud je Aspose.Cells.AbstractCalculationEngine.ProcessBuiltInFunctions true, pak budou vestavěné funkce také zkontrolovány zde.
Návratová hodnota
true, pokud je třeba danou funkci vždy znovu vypočítat.
Poznámky
Pro sdílené vzorce sdílí více buněk stejnou funkci. Pokud parametry funkce zůstávají stejné i pro tyto buňky, pak obecně je třeba tuto funkci vypočítat pouze jednou. Z hlediska výkonu proto vypočítáme takovou funkci pouze jednou (Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) je volána pouze jednou, místo aby byla volána opakovaně pro každou buňku). Nicméně pro uživatelskou vlastní implementaci může být funkce, zejména vlastní funkce, potřebná k výpočtu odlišně pro různé buňky. Pokud ano, uživatel musí tuto metodu přepsat, aby vrátila true pro funkci. A pro Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) může být daná Aspose.Cells.CalculationData.CalculatedValue již inicializována s uloženou hodnotou předchozího výpočtu.
SkipCalculation()
protected void SkipCalculation()