Verringerung der Berechnungszeit der Cell.Calculate Methode

Mögliche Verwendungsszenarien

Normalerweise empfehlen wir Benutzern, die Methode Workbook.CalculateFormula() einmal aufzurufen und dann die berechneten Werte der einzelnen Zellen abzurufen. Manchmal möchten Benutzer jedoch nicht die gesamte Arbeitsmappe berechnen. Sie möchten nur eine einzelne Zelle berechnen. Aspose.Cells bietet die Eigenschaft CalculationOptions.Recursive, die auf false gesetzt werden kann und die die Berechnungszeit der einzelnen Zelle erheblich verringert. Denn wenn die rekursive Eigenschaft auf true gesetzt ist, werden bei jedem Aufruf alle Abhängigen von Zellen neu berechnet. Wenn die rekursive Eigenschaft jedoch auf false gesetzt ist, werden abhängige Zellen nur einmal berechnet und bei nachfolgenden Aufrufen nicht erneut berechnet.

Verringerung der Berechnungszeit der Cell.Calculate() Methode

Der folgende Beispielcode veranschaulicht die Verwendung der Eigenschaft CalculationOptions.Recursive. Bitte führen Sie diesen Code mit der angegebenen Beispiel Exceldatei aus und überprüfen Sie die Konsolenausgabe. Sie werden feststellen, dass durch das Einstellen der rekursiven Eigenschaft auf false die Berechnungszeit erheblich verringert wurde. Lesen Sie auch die Kommentare, um diese Eigenschaft besser zu verstehen.

// 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");
}

Konsolenausgabe

Dies ist die Konsolenausgabe des oben genannten Beispielcodes, wenn er mit der angegebenen Beispiel Exceldatei auf unserem Rechner ausgeführt wird. Bitte beachten Sie, dass Ihr Ergebnis möglicherweise abweicht, aber die verstrichene Zeit nach Einstellung der rekursiven Eigenschaft auf false ist immer geringer als bei Einstellung auf true.

 Recursive true: 51 seconds

Recursive false: 16 seconds