Diminuire il tempo di calcolo del metodo Cell.Calculate

Possibili scenari di utilizzo

Normalmente, consigliamo agli utenti di chiamareWorkbook.CalculateFormula() una volta e quindi ottenere i valori calcolati delle singole celle. Ma a volte, gli utenti non vogliono calcolare l’intera cartella di lavoro. Vogliono solo calcolare una singola cella. Aspose.Cells fornisceCalculationOptions.Recursive proprietà che è possibile impostarefalsoe ridurrà significativamente il tempo di calcolo della singola cella. Perché quando la proprietà ricorsiva è impostata suVEROquindi tutti i dipendenti delle celle vengono ricalcolati a ogni chiamata. Ma quando la proprietà ricorsiva è impostata sufalso, le celle dipendenti vengono calcolate solo una volta e non vengono calcolate nuovamente nelle chiamate successive.

Diminuire il tempo di calcolo del metodo Cell.Calculate()

Il codice di esempio seguente illustra l’utilizzo diCalculationOptions.Recursive proprietà. Si prega di eseguire questo codice con il file givenfile excel di esempio e controlla l’output della sua console. Scoprirai che impostando la proprietà ricorsiva sufalsoha ridotto significativamente il tempo di calcolo. Si prega di leggere anche i commenti per una migliore comprensione di questa proprietà.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
public static void main(String[] args) throws Exception {
// Test calculation time after setting recursive true
TestCalcTimeRecursive(true);
// Test calculation time after setting recursive false
TestCalcTimeRecursive(false);
}
// --------------------------------------------------
static void TestCalcTimeRecursive(boolean rec) throws Exception {
String dataDir = Utils.getDataDir(DecreaseCalculationTime.class);
// Load your sample workbook
Workbook wb = new Workbook(dataDir + "sample.xlsx");
// Access first worksheet
Worksheet ws = wb.getWorksheets().get(0);
// Set the calculation option, set recursive true or false as per parameter
CalculationOptions opts = new CalculationOptions();
opts.setRecursive(rec);
// Start calculating time in nanoseconds
long startTime = System.nanoTime();
// Calculate cell A1 one million times
for (int i = 0; i < 1000000; i++) {
ws.getCells().get("A1").calculate(opts);
}
// Calculate elapsed time in seconds
long second = 1000000000;
long estimatedTime = System.nanoTime() - startTime;
estimatedTime = estimatedTime / second;
// Print the elapsed time in seconds
System.out.println("Recursive " + rec + ": " + estimatedTime + " seconds");
}

Uscita console

Questo è l’output della console del codice di esempio precedente quando eseguito con il file givenfile excel di esempio sulla nostra macchina. Tieni presente che l’output potrebbe differire ma il tempo trascorso dopo aver impostato la proprietà ricorsiva sufalso sarà sempre inferiore all’impostazione suVERO.

 Recursive true: 51 seconds

Recursive false: 16 seconds