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