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