Ridurre il tempo di calcolo del metodo Cell.Calculate

Possibili Scenari di Utilizzo

Normalmente, consigliamo agli utenti di chiamare il metodo Workbook.CalculateFormula() una volta e quindi ottenere i valori calcolati delle singole celle. Ma a volte, gli utenti non vogliono calcolare l’intero foglio di lavoro. Vogliono solo calcolare una singola cella. Aspose.Cells fornisce la proprietà CalculationOptions.Recursive che è possibile impostare su false e ridurrà notevolmente il tempo di calcolo della cella individuale. Perché quando la proprietà ricorsiva è impostata su true, allora tutte le celle dipendenti vengono ricalcolate ad ogni chiamata. Ma quando la proprietà ricorsiva è impostata su false, allora le celle dipendenti vengono calcolate solo una volta e non vengono ricalcolate di nuovo nelle chiamate successive.

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

Il seguente codice di esempio illustra l’uso della proprietà CalculationOptions.Recursive. Si prega di eseguire questo codice con il file excel di esempio fornito e controllare l’output della console. Si noterà che l’impostazione della proprietà ricorsiva su false ha ridotto notevolmente il tempo di calcolo. Si prega anche di leggere 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");
}

Output della console

Questo è l’output della console del codice di esempio sopra eseguito con il file excel di esempio sul nostro computer. Si prega di notare che il proprio output potrebbe differire, ma il tempo trascorso dopo aver impostato la proprietà ricorsiva su false sarà sempre inferiore rispetto a impostarla su true.

 Recursive true: 51 seconds

Recursive false: 16 seconds