Class AbstractCalculationEngine
Namespace: Aspose.Cells
Assembly: Aspose.Cells.dll (25.2.0)
Representerar användarens anpassade beräkningsmotor för att utöka den standardmässiga beräkningsmotorn i Aspose.Cells.
public abstract class AbstractCalculationEngine
Arv
object ← AbstractCalculationEngine
Arvade Medlemmar
object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()
Exempel
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))
{
//utför beräkning för MYFUNC här
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);
}
//bearbeta parametern här
//res = ...;
}
data.CalculatedValue = res;
}
}
}
Anmärkningar
Användaren bör inte ändra någon del av Workbook direkt i denna implementation (förutom det beräknade resultatet av den anpassade funktionen, som kan sättas av egenskapen CalculationData.CalculatedValue). Annars kan oväntade resultat eller undantag uppstå. Om användaren behöver ändra annan data än det beräknade resultatet i implementationen för vissa anpassade funktioner, till exempel, ändra cellens formel, stil, …etc., bör användaren samla dessa data i denna implementation och ändra dem utanför ramen för formelberäkning.
Konstruktörer
AbstractCalculationEngine()
protected AbstractCalculationEngine()
Egenskaper
IsParamArrayModeRequired
Anger om denna motor behöver att parametern beräknas i array-läge. Standardvärdet är false. Om Aspose.Cells.CalculationData.GetParamValueInArrayMode(System.Int32,System.Int32,System.Int32) krävs när man beräknar anpassade funktioner och användaren inte har uppdaterat definitionen för dem (genom Aspose.Cells.Workbook.UpdateCustomFunctionDefinition(Aspose.Cells.CustomFunctionDefinition)), måste denna egenskap sättas till true.
public virtual bool IsParamArrayModeRequired { get; }
Egenskapsvärde
Anmärkningar
Om denna anpassade beräkningsmotor behöver att parametern beräknas i array-läge, kommer fler stackar att krävas för att cacha trädet för parametrar och Calculate() metoden kan kallas rekursivt för att beräkna parametrarnas värde. Av prestandaskäl, vänligen håll denna egenskap som standardvärde (false) om det inte finns något särskilt krav.
IsParamLiteralRequired
Anger om denna motor behöver den bokstavliga texten av parametern vid beräkning. Standardvärdet är false.
public virtual bool IsParamLiteralRequired { get; }
Egenskapsvärde
Anmärkningar
Om denna anpassade beräkningsmotor behöver den bokstavliga texten av parametern, kommer fler stackar att krävas för att cacha den bokstavliga texten för parametrar och Calculate() metoden kan kallas rekursivt för att beräkna parametrarnas värde. Generellt behövs den bokstavliga texten inte för att beräkna formler och denna egenskap bör hållas som false för de flesta implementationer för att få bättre prestanda.
ProcessBuiltInFunctions
Om inbyggda funktioner som har stöds av den inbyggda motorn bör kontrolleras och bearbetas av denna implementation. Standard är false.
public virtual bool ProcessBuiltInFunctions { get; }
Egenskapsvärde
Anmärkningar
Om användaren behöver ändra beräkningslogiken för vissa inbyggda funktioner, bör denna egenskap sättas till true. Annars, vänligen lämna denna egenskap som false av prestandaskäl.
Metoder
Calculate(CalculationData)
Beräknar en funktion med angivna data.
public abstract void Calculate(CalculationData data)
Parametrar
data
CalculationData
de nödvändiga data för att beräkna funktionen såsom funktionsnamn, parametrar, …etc.
Anmärkningar
Användaren bör sätta det beräknade värdet för angivna data för alla funktioner (inklusive excel inbyggda funktioner) som han vill beräkna själv i denna implementation.
ForceRecalculate(string)
Om tvinga angiven funktion att alltid beräknas på nytt när man beräknar delade formler.
public virtual bool ForceRecalculate(string functionName)
Parametrar
functionName
string
namnet på funktionen. Generellt är det namnet på den anpassade funktionen. Om Aspose.Cells.AbstractCalculationEngine.ProcessBuiltInFunctions är true, kommer även inbyggda funktioner att kontrolleras här.
Returnerar
true om den angivna funktionen alltid behöver beräknas på nytt.
Anmärkningar
För delade formler delar flera celler samma funktion. Om funktionens parametrar förblir desamma för dessa celler också, så behöver denna funktion vanligtvis bara beräknas en gång. Så av prestandaskäl beräknar vi endast denna typ av funktion en gång också (Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) kallas endast en gång, istället för att kallas upprepade gånger för varje cell). Men för användarens anpassade implementation, kan det hända att funktionen, särskilt den anpassade funktionen, behöver beräknas olika för olika celler. Om så är fallet, behöver användaren åsidosätta denna metod för att få den att returnera true för funktionen. Och för Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData), kan den angivna Aspose.Cells.CalculationData.CalculatedValue ha initialiserats med det cachade värdet från tidigare beräkning.
SkipCalculation()
protected void SkipCalculation()