Verringern Sie die Berechnungszeit von Cell. Berechnungsmethode

Mögliche Nutzungsszenarien

Normalerweise empfehlen wir Benutzern anzurufenWorkbook.CalculateFormula() Methode einmal und erhalte dann die errechneten Werte der einzelnen Zellen. Aber manchmal möchten Benutzer nicht die gesamte Arbeitsmappe berechnen. Sie wollen nur eine einzelne Zelle berechnen. Aspose.Cells bietetBerechnungsoptionen.Rekursiv Eigenschaft, die Sie festlegen könnenFALSCHund es wird die Berechnungszeit der einzelnen Zelle erheblich verkürzen. Denn wenn die rekursive Eigenschaft auf gesetzt istwahrdann werden alle abhängigen Zellen bei jedem Aufruf neu berechnet. Aber wenn die rekursive Eigenschaft auf gesetzt istFALSCH, dann werden abhängige Zellen nur einmal berechnet und bei nachfolgenden Aufrufen nicht erneut berechnet.

Verringern Sie die Berechnungszeit der Methode Cell.Calculate()

Der folgende Beispielcode veranschaulicht die Verwendung vonBerechnungsoptionen.Rekursiv Eigentum. Bitte führen Sie diesen Code mit dem angegebenen ausExcel-Beispieldatei und überprüfen Sie die Konsolenausgabe. Sie werden feststellen, dass die rekursive Eigenschaft auf eingestellt wirdFALSCHhat die Berechnungszeit erheblich verkürzt. Bitte lesen Sie auch die Kommentare für ein besseres Verständnis dieser Eigenschaft.

// 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 obigen Beispielcodes, wenn er mit dem angegebenen ausgeführt wirdExcel-Beispieldatei auf unserer Maschine. Bitte beachten Sie, dass Ihre Ausgabe abweichen kann, aber die verstrichene Zeit nach dem Setzen der rekursiven Eigenschaft aufFALSCH wird immer kleiner sein als eingestelltwahr.

 Recursive true: 51 seconds

Recursive false: 16 seconds