Minska beräkningstiden för Cell.Calculate metoden med Python.NET

Möjliga användningsscenario

Normalt rekommenderar vi användare att anropa workbook.calculate_formula() -metoden en gång och sedan hämta de beräknade värdena från enskilda celler. När du arbetar med enkelcellsberäkningar kan du använda egenskapen calculation_options.recursive för att avsevärt minska beräkningstiden. Att sätta denna egenskap till False förhindrar omberäkning av beroende celler vid efterföljande anrop.

Optimering av Cellberäkningsprestanda

Följande exempel visar användningen av den rekursiva egenskapen. Använd den medföljande exempel-Excel-filen för att testa prestandaskillnaden. Koden visar hur inställning av recursive=False minskar beräkningstiden genom att undvika onödiga omräkningar av beroende celler.

# 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")

Prestanda Bänkning Resultat

Vanlig utdata när den optimerade koden körs med exempel filen visar avsevärd tidsminskning:

Recursive True: 96 seconds
Recursive False: 42 seconds