Verringerung der Berechnungszeit der Cell.Calculate Methode

Mögliche Verwendungsszenarien

Normalerweise empfehlen wir den Nutzern, die Methode Workbook.CalculateFormula() einmal aufzurufen und dann die berechneten Werte der einzelnen Zellen abzurufen. Manchmal möchten Nutzer jedoch nicht das gesamte Arbeitsbuch berechnen, sondern nur eine einzelne Zelle. Aspose.Cells bietet die Eigenschaft CalculationOptions.Recursive, die auf false gesetzt werden kann und die Berechnungszeit für einzelne Zellen deutlich verkürzt. Wird die rekursive Eigenschaft auf true gesetzt, werden alle Abhängigkeiten der Zellen bei jedem Aufruf neu berechnet. Bei Einstellung auf false werden abhängige Zellen nur einmal berechnet und bei späteren Aufrufen nicht erneut.

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