Verringerung der Berechnungszeit der Cell.Calculate Methode mit Python.NET

Mögliche Verwendungsszenarien

Normalerweise empfehlen wir Benutzern, die Methode workbook.calculate_formula() einmal aufzurufen und dann die berechneten Werte einzelner Zellen abzurufen. Bei der Arbeit mit einzelnen Zellberechnungen können Sie die Eigenschaft calculation_options.recursive verwenden, um die Berechnungszeit erheblich zu reduzieren. Das Setzen dieser Eigenschaft auf False verhindert die Neukalkulation abhängiger Zellen bei nachfolgenden Aufrufen.

Optimierung der Zellbereistungsfähigkeit

Das folgende Beispiel zeigt die Verwendung der rekursiven Eigenschaft. Verwenden Sie die bereitgestellte Beispieldatei Excel, um die Leistungsunterschiede zu testen. Der Code zeigt, wie das Setzen von recursive=False die Berechnungszeit durch Vermeidung redundanter abhängiger Zellneuberechnungen reduziert.

# For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
# Test calculation time after setting recursive true
test_calc_time_recursive(True)

# Test calculation time after setting recursive false
test_calc_time_recursive(False)
import os
import time
from aspose.cells import Workbook, CalculationOptions

def test_calc_time_recursive(rec):
    """
    Tests calculation time with recursive option and prints elapsed seconds
    """
    # The path to the documents directory
    current_dir = os.path.dirname(os.path.abspath(__file__))
    data_dir = os.path.join(current_dir, "data")

    # Load sample workbook
    wb = Workbook(os.path.join(data_dir, "sample.xlsx"))

    # Access first worksheet
    ws = wb.worksheets[0]

    # Set calculation options
    opts = CalculationOptions()
    opts.recursive = rec

    # Start timing
    start_time = time.perf_counter()

    # Calculate cell A1 one million times
    for _ in range(1000000):
        ws.cells.get("A1").calculate(opts)

    # Calculate elapsed time
    elapsed_time = int(time.perf_counter() - start_time)

    # Print results
    print(f"Recursive {rec}: {elapsed_time} seconds")

Leistungsbenchmark-Ergebnisse

Typische Ausgabe bei Ausführung des optimierten Codes mit der Beispieldatei zeigt eine signifikante Zeitreduktion:

Recursive True: 96 seconds
Recursive False: 42 seconds