Class AbstractCalculationEngine
Namespace: Aspose.Cells
Assembly: Aspose.Cells.dll (25.2.0)
Rappresenta il motore di calcolo personalizzato dell’utente per estendere il motore di calcolo predefinito di Aspose.Cells.
public abstract class AbstractCalculationEngine
Ereditarietà
object ← AbstractCalculationEngine
Membri Ereditati
object.GetType(), object.MemberwiseClone(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()
Esempi
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))
{
//eseguire il calcolo per MYFUNC qui
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);
}
//elaborare il parametro qui
//res = ...;
}
data.CalculatedValue = res;
}
}
}
Osservazioni
L’utente non dovrebbe modificare alcuna parte del Workbook direttamente in questa implementazione (eccetto il risultato calcolato della funzione personalizzata, che può essere impostato tramite la proprietà CalculationData.CalculatedValue). Altrimenti, possono verificarsi risultati imprevisti o eccezioni. Se l’utente ha bisogno di modificare altri dati oltre al risultato calcolato nell’implementazione per alcune funzioni personalizzate, ad esempio, modificare la formula della cella, lo stile, …ecc., l’utente dovrebbe raccogliere quei dati in questa implementazione e modificarli al di fuori dell’ambito del calcolo della formula.
Costruttori
AbstractCalculationEngine()
protected AbstractCalculationEngine()
Proprietà
IsParamArrayModeRequired
Indica se questo motore ha bisogno che il parametro venga calcolato in modalità array. Il valore predefinito è falso. Se Aspose.Cells.CalculationData.GetParamValueInArrayMode(System.Int32,System.Int32,System.Int32) è necessario quando si calcolano funzioni personalizzate e l’utente non ha aggiornato la definizione per esse (tramite Aspose.Cells.Workbook.UpdateCustomFunctionDefinition(Aspose.Cells.CustomFunctionDefinition)), questa proprietà deve essere impostata su true.
public virtual bool IsParamArrayModeRequired { get; }
Valore della Proprietà
Osservazioni
Se questo motore di calcolo personalizzato ha bisogno che il parametro venga calcolato in modalità array, saranno necessari più stack per memorizzare nella cache l’albero per i parametri e il metodo Calculate() potrebbe essere chiamato ricorsivamente per calcolare il valore del parametro. Per considerazioni di prestazioni, si prega di mantenere questa proprietà al valore predefinito (falso) se non ci sono requisiti speciali.
IsParamLiteralRequired
Indica se questo motore ha bisogno del testo letterale del parametro durante il calcolo. Il valore predefinito è falso.
public virtual bool IsParamLiteralRequired { get; }
Valore della Proprietà
Osservazioni
Se questo motore di calcolo personalizzato ha bisogno del testo letterale del parametro, saranno necessari più stack per memorizzare nella cache il testo letterale per i parametri e il metodo Calculate() potrebbe essere chiamato ricorsivamente per calcolare il valore del parametro. Generalmente, il testo letterale non è necessario per calcolare le formule e questa proprietà dovrebbe essere mantenuta su false per la maggior parte delle implementazioni per ottenere migliori prestazioni.
ProcessBuiltInFunctions
Indica se le funzioni integrate già supportate dal motore integrato dovrebbero essere controllate e elaborate da questa implementazione. Il valore predefinito è falso.
public virtual bool ProcessBuiltInFunctions { get; }
Valore della Proprietà
Osservazioni
Se l’utente ha bisogno di modificare la logica di calcolo di alcune funzioni integrate, questa proprietà deve essere impostata su true. Altrimenti, si prega di mantenere questa proprietà su false per considerazioni di prestazioni.
Metodi
Calculate(CalculationData)
Calcola una funzione con i dati forniti.
public abstract void Calculate(CalculationData data)
Parametri
data
CalculationData
i dati richiesti per calcolare la funzione come nome della funzione, parametri, …ecc.
Osservazioni
L’utente dovrebbe impostare il valore calcolato per i dati forniti per tutte le funzioni (comprese le funzioni native di Excel) che desidera calcolare da solo in questa implementazione.
ForceRecalculate(string)
Indica se forzare una data funzione a essere ricalcolata sempre quando si calcolano formule condivise.
public virtual bool ForceRecalculate(string functionName)
Parametri
functionName
string
nome della funzione. Generalmente è il nome della funzione personalizzata. Se Aspose.Cells.AbstractCalculationEngine.ProcessBuiltInFunctions è true, anche le funzioni integrate verranno controllate qui.
Restituisce
true se la funzione specificata deve essere ricalcolata sempre.
Osservazioni
Per le formule condivise, più celle condividono la stessa funzione. Se i parametri della funzione rimangono uguali anche per quelle celle, generalmente questa funzione deve essere calcolata solo una volta. Quindi, per considerazioni di prestazioni, calcoliamo solo una volta anche questo tipo di funzione (Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData) viene chiamato solo una volta, invece di essere chiamato ripetutamente per ogni cella). Tuttavia, per l’implementazione personalizzata dell’utente, potrebbe essere che la funzione, in particolare la funzione personalizzata, deve essere calcolata in modo diverso per celle diverse. Se così fosse, l’utente deve sovrascrivere questo metodo per farlo restituire true per la funzione. E per Aspose.Cells.AbstractCalculationEngine.Calculate(Aspose.Cells.CalculationData), il valore Aspose.Cells.CalculationData.CalculatedValue fornito potrebbe essere stato inizializzato con il valore memorizzato nella cache del calcolo precedente.
SkipCalculation()
protected void SkipCalculation()